Using xargs with pdftk Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)xargs with multiple commandsflexible number of agruments with xargsExecuting lines of a file with xargs, using stdout redirectionxargs split incoming lineUsing xargs with mv and mkdir command in LinuxIssue using xargs in LinuxUsing Xargs with hocr2pdfUsing xargs with findxargs with shell function doesn't workUsing xargs with $() - operator precedence?
Output the ŋarâþ crîþ alphabet song without using (m)any letters
List *all* the tuples!
What does this icon in iOS Stardew Valley mean?
Dating a Former Employee
If a contract sometimes uses the wrong name, is it still valid?
How widely used is the term Treppenwitz? Is it something that most Germans know?
Why didn't this character "real die" when they blew their stack out in Altered Carbon?
How do I keep my slimes from escaping their pens?
Should I use a zero-interest credit card for a large one-time purchase?
How do pianists reach extremely loud dynamics?
Withdrew £2800, but only £2000 shows as withdrawn on online banking; what are my obligations?
What exactly is a "Meth" in Altered Carbon?
Why is my conclusion inconsistent with the van't Hoff equation?
How to Merge Multiple Columns in to Two Columns based on Column 1 Value?
Using et al. for a last / senior author rather than for a first author
In predicate logic, does existential quantification (∃) include universal quantification (∀), i.e. can 'some' imply 'all'?
Overriding an object in memory with placement new
How come Sam didn't become Lord of Horn Hill?
What does the "x" in "x86" represent?
How to deal with a team lead who never gives me credit?
When do you get frequent flier miles - when you buy, or when you fly?
Do I really need recursive chmod to restrict access to a folder?
What to do with chalk when deepwater soloing?
Why am I getting the error "non-boolean type specified in a context where a condition is expected" for this request?
Using xargs with pdftk
Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)xargs with multiple commandsflexible number of agruments with xargsExecuting lines of a file with xargs, using stdout redirectionxargs split incoming lineUsing xargs with mv and mkdir command in LinuxIssue using xargs in LinuxUsing Xargs with hocr2pdfUsing xargs with findxargs with shell function doesn't workUsing xargs with $() - operator precedence?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
I am using the following code to concatenate all the pdf files in the current directory:
find . -iname '*.pdf'|sort|xargs|xargs -I pdftk cat output union.pdf
The first invocation of xargs has the effect of converting the output of sort into a single line, with items separated by a space. But the result is this:
Error: Unable to find file.
Error: Failed to open PDF file:
./001.pdf ./002.pdf ./003.pdf ./004.pdf ./007.pdf ./010.pdf ./031.pdf ./057.pdf ./077.pdf ./103.pdf ./131.pdf ./155.pdf ./179.pdf ./205.pdf ./233.pdf ./261.pdf ./285.pdf ./313.pdf ./331.pdf ./357.pdf ./383.pdf ./411.pdf
Errors encountered. No output created.
Done. Input errors, so no output created.
Does xargs pass the argument to pdftk with surrounding quotes? How to prevent this? (Whitespaces, escaping and the way they interact with commands always drive me crazy...)
imagemagick xargs
add a comment |
I am using the following code to concatenate all the pdf files in the current directory:
find . -iname '*.pdf'|sort|xargs|xargs -I pdftk cat output union.pdf
The first invocation of xargs has the effect of converting the output of sort into a single line, with items separated by a space. But the result is this:
Error: Unable to find file.
Error: Failed to open PDF file:
./001.pdf ./002.pdf ./003.pdf ./004.pdf ./007.pdf ./010.pdf ./031.pdf ./057.pdf ./077.pdf ./103.pdf ./131.pdf ./155.pdf ./179.pdf ./205.pdf ./233.pdf ./261.pdf ./285.pdf ./313.pdf ./331.pdf ./357.pdf ./383.pdf ./411.pdf
Errors encountered. No output created.
Done. Input errors, so no output created.
Does xargs pass the argument to pdftk with surrounding quotes? How to prevent this? (Whitespaces, escaping and the way they interact with commands always drive me crazy...)
imagemagick xargs
add a comment |
I am using the following code to concatenate all the pdf files in the current directory:
find . -iname '*.pdf'|sort|xargs|xargs -I pdftk cat output union.pdf
The first invocation of xargs has the effect of converting the output of sort into a single line, with items separated by a space. But the result is this:
Error: Unable to find file.
Error: Failed to open PDF file:
./001.pdf ./002.pdf ./003.pdf ./004.pdf ./007.pdf ./010.pdf ./031.pdf ./057.pdf ./077.pdf ./103.pdf ./131.pdf ./155.pdf ./179.pdf ./205.pdf ./233.pdf ./261.pdf ./285.pdf ./313.pdf ./331.pdf ./357.pdf ./383.pdf ./411.pdf
Errors encountered. No output created.
Done. Input errors, so no output created.
Does xargs pass the argument to pdftk with surrounding quotes? How to prevent this? (Whitespaces, escaping and the way they interact with commands always drive me crazy...)
imagemagick xargs
I am using the following code to concatenate all the pdf files in the current directory:
find . -iname '*.pdf'|sort|xargs|xargs -I pdftk cat output union.pdf
The first invocation of xargs has the effect of converting the output of sort into a single line, with items separated by a space. But the result is this:
Error: Unable to find file.
Error: Failed to open PDF file:
./001.pdf ./002.pdf ./003.pdf ./004.pdf ./007.pdf ./010.pdf ./031.pdf ./057.pdf ./077.pdf ./103.pdf ./131.pdf ./155.pdf ./179.pdf ./205.pdf ./233.pdf ./261.pdf ./285.pdf ./313.pdf ./331.pdf ./357.pdf ./383.pdf ./411.pdf
Errors encountered. No output created.
Done. Input errors, so no output created.
Does xargs pass the argument to pdftk with surrounding quotes? How to prevent this? (Whitespaces, escaping and the way they interact with commands always drive me crazy...)
imagemagick xargs
imagemagick xargs
asked Apr 11 at 10:38
MizarMizar
907
907
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Does xargs pass the argument to pdftk with surrounding quotes?
Yes and no, but technically no. xargs does no quoting, and pdftk does no unquoting either.
The way programs receive command-line arguments in Linux/Unix isn't by using a single string that needs to be quoted and unquoted – that's just how the user-facing "command shell" language works, and quotes are interpreted by your shell, not by programs themselves. (This is the opposite of how Windows does it.)
Internally programs are started using an array (/list/vector) of strings, which inherently preserves the exact text contents and separation of every element, so it doesn't really use quoting or escaping in the first place. (That is – unless you have to nest it, in which case it's back to string quoting and parsing, as you'll see below...)
For example, your command line is parsed into this (using C-like array syntax for example, but the quotes aren't actually part of the strings):
1. "find", ".", "-iname", "*.pdf", NULL
2. "sort", NULL
3. "xargs", NULL
4. "xargs", "-I", "", "pdftk", "", "cat", "output", "union.pdf", NULL
└─xargs uses these elements as the command─┘
So when xargs reads a line of input (because -I sets it to line-by-line mode), it replaces the symbols in each individual element with the input line, without rearranging the elements in any way. Then it asks the OS to runs the result:
"pdftk", "./001.pdf ./002.pdf ./003.pdf …", "cat", "output", "union.pdf", NULL
So you'll need a different way to achieve this than xargs -I
alone.
You could, for example, ask xargs to run a shell – which will then interpret/split/unquote the input the same way that you'd expect from a shell:
find … | sort | xargs | xargs -I bash -c "pdftk cat output union.pdf"
The element following -c will become
pdftk ./001.pdf ./002.pdf … cat output union.pdf
and bash will split it into words as expected. (But note that because xargs doesn't do quoting, this will split up filenames that happen to contain spaces, and will give weird results when filenames contain special characters.)You could use the shell's "process substitution" feature:
pdftk $(find … | sort) cat output union.pdf
This will split the resulting text at any whitespace (just like
$var
variable expansion). The lines don't need to be joined first. But it will have the same issues with filenames containing spaces, and slightly fewer issues with special characters.Recommended: You could avoid 'find' and 'xargs' entirely and use the interactive shell's built-in wildcard matching directly:
pdftk *.pdf cat output union.pdf
Ordinary * isn't recursive, but in Bash or zsh you also have ** which is the recursive mode:
shopt -s globstar # enable the feature (only needed in bash)
pdftk **/*.pdf cat output union.pdf(The match results will always be sorted, at least in shells using the POSIX sh language. And because the shell directly expands each filename to an individual command-line element, there will be no quoting issues at all, even with unusal filenames.)
1
Aaah, wonderful insightful answer! I thought using xargs was the same as typing a command in bash, but now I understand the difference.
– Mizar
Apr 11 at 12:11
1
There are other situations which do work like that (e.g.su someuser -c "a long command"
always calls a shell; andssh somehost a long command
deliberately joins and quotes all words so that the server could split them back through a shell).
– grawity
Apr 11 at 12:30
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "3"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1424180%2fusing-xargs-with-pdftk%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Does xargs pass the argument to pdftk with surrounding quotes?
Yes and no, but technically no. xargs does no quoting, and pdftk does no unquoting either.
The way programs receive command-line arguments in Linux/Unix isn't by using a single string that needs to be quoted and unquoted – that's just how the user-facing "command shell" language works, and quotes are interpreted by your shell, not by programs themselves. (This is the opposite of how Windows does it.)
Internally programs are started using an array (/list/vector) of strings, which inherently preserves the exact text contents and separation of every element, so it doesn't really use quoting or escaping in the first place. (That is – unless you have to nest it, in which case it's back to string quoting and parsing, as you'll see below...)
For example, your command line is parsed into this (using C-like array syntax for example, but the quotes aren't actually part of the strings):
1. "find", ".", "-iname", "*.pdf", NULL
2. "sort", NULL
3. "xargs", NULL
4. "xargs", "-I", "", "pdftk", "", "cat", "output", "union.pdf", NULL
└─xargs uses these elements as the command─┘
So when xargs reads a line of input (because -I sets it to line-by-line mode), it replaces the symbols in each individual element with the input line, without rearranging the elements in any way. Then it asks the OS to runs the result:
"pdftk", "./001.pdf ./002.pdf ./003.pdf …", "cat", "output", "union.pdf", NULL
So you'll need a different way to achieve this than xargs -I
alone.
You could, for example, ask xargs to run a shell – which will then interpret/split/unquote the input the same way that you'd expect from a shell:
find … | sort | xargs | xargs -I bash -c "pdftk cat output union.pdf"
The element following -c will become
pdftk ./001.pdf ./002.pdf … cat output union.pdf
and bash will split it into words as expected. (But note that because xargs doesn't do quoting, this will split up filenames that happen to contain spaces, and will give weird results when filenames contain special characters.)You could use the shell's "process substitution" feature:
pdftk $(find … | sort) cat output union.pdf
This will split the resulting text at any whitespace (just like
$var
variable expansion). The lines don't need to be joined first. But it will have the same issues with filenames containing spaces, and slightly fewer issues with special characters.Recommended: You could avoid 'find' and 'xargs' entirely and use the interactive shell's built-in wildcard matching directly:
pdftk *.pdf cat output union.pdf
Ordinary * isn't recursive, but in Bash or zsh you also have ** which is the recursive mode:
shopt -s globstar # enable the feature (only needed in bash)
pdftk **/*.pdf cat output union.pdf(The match results will always be sorted, at least in shells using the POSIX sh language. And because the shell directly expands each filename to an individual command-line element, there will be no quoting issues at all, even with unusal filenames.)
1
Aaah, wonderful insightful answer! I thought using xargs was the same as typing a command in bash, but now I understand the difference.
– Mizar
Apr 11 at 12:11
1
There are other situations which do work like that (e.g.su someuser -c "a long command"
always calls a shell; andssh somehost a long command
deliberately joins and quotes all words so that the server could split them back through a shell).
– grawity
Apr 11 at 12:30
add a comment |
Does xargs pass the argument to pdftk with surrounding quotes?
Yes and no, but technically no. xargs does no quoting, and pdftk does no unquoting either.
The way programs receive command-line arguments in Linux/Unix isn't by using a single string that needs to be quoted and unquoted – that's just how the user-facing "command shell" language works, and quotes are interpreted by your shell, not by programs themselves. (This is the opposite of how Windows does it.)
Internally programs are started using an array (/list/vector) of strings, which inherently preserves the exact text contents and separation of every element, so it doesn't really use quoting or escaping in the first place. (That is – unless you have to nest it, in which case it's back to string quoting and parsing, as you'll see below...)
For example, your command line is parsed into this (using C-like array syntax for example, but the quotes aren't actually part of the strings):
1. "find", ".", "-iname", "*.pdf", NULL
2. "sort", NULL
3. "xargs", NULL
4. "xargs", "-I", "", "pdftk", "", "cat", "output", "union.pdf", NULL
└─xargs uses these elements as the command─┘
So when xargs reads a line of input (because -I sets it to line-by-line mode), it replaces the symbols in each individual element with the input line, without rearranging the elements in any way. Then it asks the OS to runs the result:
"pdftk", "./001.pdf ./002.pdf ./003.pdf …", "cat", "output", "union.pdf", NULL
So you'll need a different way to achieve this than xargs -I
alone.
You could, for example, ask xargs to run a shell – which will then interpret/split/unquote the input the same way that you'd expect from a shell:
find … | sort | xargs | xargs -I bash -c "pdftk cat output union.pdf"
The element following -c will become
pdftk ./001.pdf ./002.pdf … cat output union.pdf
and bash will split it into words as expected. (But note that because xargs doesn't do quoting, this will split up filenames that happen to contain spaces, and will give weird results when filenames contain special characters.)You could use the shell's "process substitution" feature:
pdftk $(find … | sort) cat output union.pdf
This will split the resulting text at any whitespace (just like
$var
variable expansion). The lines don't need to be joined first. But it will have the same issues with filenames containing spaces, and slightly fewer issues with special characters.Recommended: You could avoid 'find' and 'xargs' entirely and use the interactive shell's built-in wildcard matching directly:
pdftk *.pdf cat output union.pdf
Ordinary * isn't recursive, but in Bash or zsh you also have ** which is the recursive mode:
shopt -s globstar # enable the feature (only needed in bash)
pdftk **/*.pdf cat output union.pdf(The match results will always be sorted, at least in shells using the POSIX sh language. And because the shell directly expands each filename to an individual command-line element, there will be no quoting issues at all, even with unusal filenames.)
1
Aaah, wonderful insightful answer! I thought using xargs was the same as typing a command in bash, but now I understand the difference.
– Mizar
Apr 11 at 12:11
1
There are other situations which do work like that (e.g.su someuser -c "a long command"
always calls a shell; andssh somehost a long command
deliberately joins and quotes all words so that the server could split them back through a shell).
– grawity
Apr 11 at 12:30
add a comment |
Does xargs pass the argument to pdftk with surrounding quotes?
Yes and no, but technically no. xargs does no quoting, and pdftk does no unquoting either.
The way programs receive command-line arguments in Linux/Unix isn't by using a single string that needs to be quoted and unquoted – that's just how the user-facing "command shell" language works, and quotes are interpreted by your shell, not by programs themselves. (This is the opposite of how Windows does it.)
Internally programs are started using an array (/list/vector) of strings, which inherently preserves the exact text contents and separation of every element, so it doesn't really use quoting or escaping in the first place. (That is – unless you have to nest it, in which case it's back to string quoting and parsing, as you'll see below...)
For example, your command line is parsed into this (using C-like array syntax for example, but the quotes aren't actually part of the strings):
1. "find", ".", "-iname", "*.pdf", NULL
2. "sort", NULL
3. "xargs", NULL
4. "xargs", "-I", "", "pdftk", "", "cat", "output", "union.pdf", NULL
└─xargs uses these elements as the command─┘
So when xargs reads a line of input (because -I sets it to line-by-line mode), it replaces the symbols in each individual element with the input line, without rearranging the elements in any way. Then it asks the OS to runs the result:
"pdftk", "./001.pdf ./002.pdf ./003.pdf …", "cat", "output", "union.pdf", NULL
So you'll need a different way to achieve this than xargs -I
alone.
You could, for example, ask xargs to run a shell – which will then interpret/split/unquote the input the same way that you'd expect from a shell:
find … | sort | xargs | xargs -I bash -c "pdftk cat output union.pdf"
The element following -c will become
pdftk ./001.pdf ./002.pdf … cat output union.pdf
and bash will split it into words as expected. (But note that because xargs doesn't do quoting, this will split up filenames that happen to contain spaces, and will give weird results when filenames contain special characters.)You could use the shell's "process substitution" feature:
pdftk $(find … | sort) cat output union.pdf
This will split the resulting text at any whitespace (just like
$var
variable expansion). The lines don't need to be joined first. But it will have the same issues with filenames containing spaces, and slightly fewer issues with special characters.Recommended: You could avoid 'find' and 'xargs' entirely and use the interactive shell's built-in wildcard matching directly:
pdftk *.pdf cat output union.pdf
Ordinary * isn't recursive, but in Bash or zsh you also have ** which is the recursive mode:
shopt -s globstar # enable the feature (only needed in bash)
pdftk **/*.pdf cat output union.pdf(The match results will always be sorted, at least in shells using the POSIX sh language. And because the shell directly expands each filename to an individual command-line element, there will be no quoting issues at all, even with unusal filenames.)
Does xargs pass the argument to pdftk with surrounding quotes?
Yes and no, but technically no. xargs does no quoting, and pdftk does no unquoting either.
The way programs receive command-line arguments in Linux/Unix isn't by using a single string that needs to be quoted and unquoted – that's just how the user-facing "command shell" language works, and quotes are interpreted by your shell, not by programs themselves. (This is the opposite of how Windows does it.)
Internally programs are started using an array (/list/vector) of strings, which inherently preserves the exact text contents and separation of every element, so it doesn't really use quoting or escaping in the first place. (That is – unless you have to nest it, in which case it's back to string quoting and parsing, as you'll see below...)
For example, your command line is parsed into this (using C-like array syntax for example, but the quotes aren't actually part of the strings):
1. "find", ".", "-iname", "*.pdf", NULL
2. "sort", NULL
3. "xargs", NULL
4. "xargs", "-I", "", "pdftk", "", "cat", "output", "union.pdf", NULL
└─xargs uses these elements as the command─┘
So when xargs reads a line of input (because -I sets it to line-by-line mode), it replaces the symbols in each individual element with the input line, without rearranging the elements in any way. Then it asks the OS to runs the result:
"pdftk", "./001.pdf ./002.pdf ./003.pdf …", "cat", "output", "union.pdf", NULL
So you'll need a different way to achieve this than xargs -I
alone.
You could, for example, ask xargs to run a shell – which will then interpret/split/unquote the input the same way that you'd expect from a shell:
find … | sort | xargs | xargs -I bash -c "pdftk cat output union.pdf"
The element following -c will become
pdftk ./001.pdf ./002.pdf … cat output union.pdf
and bash will split it into words as expected. (But note that because xargs doesn't do quoting, this will split up filenames that happen to contain spaces, and will give weird results when filenames contain special characters.)You could use the shell's "process substitution" feature:
pdftk $(find … | sort) cat output union.pdf
This will split the resulting text at any whitespace (just like
$var
variable expansion). The lines don't need to be joined first. But it will have the same issues with filenames containing spaces, and slightly fewer issues with special characters.Recommended: You could avoid 'find' and 'xargs' entirely and use the interactive shell's built-in wildcard matching directly:
pdftk *.pdf cat output union.pdf
Ordinary * isn't recursive, but in Bash or zsh you also have ** which is the recursive mode:
shopt -s globstar # enable the feature (only needed in bash)
pdftk **/*.pdf cat output union.pdf(The match results will always be sorted, at least in shells using the POSIX sh language. And because the shell directly expands each filename to an individual command-line element, there will be no quoting issues at all, even with unusal filenames.)
edited Apr 11 at 20:45
answered Apr 11 at 11:18
grawitygrawity
244k37515576
244k37515576
1
Aaah, wonderful insightful answer! I thought using xargs was the same as typing a command in bash, but now I understand the difference.
– Mizar
Apr 11 at 12:11
1
There are other situations which do work like that (e.g.su someuser -c "a long command"
always calls a shell; andssh somehost a long command
deliberately joins and quotes all words so that the server could split them back through a shell).
– grawity
Apr 11 at 12:30
add a comment |
1
Aaah, wonderful insightful answer! I thought using xargs was the same as typing a command in bash, but now I understand the difference.
– Mizar
Apr 11 at 12:11
1
There are other situations which do work like that (e.g.su someuser -c "a long command"
always calls a shell; andssh somehost a long command
deliberately joins and quotes all words so that the server could split them back through a shell).
– grawity
Apr 11 at 12:30
1
1
Aaah, wonderful insightful answer! I thought using xargs was the same as typing a command in bash, but now I understand the difference.
– Mizar
Apr 11 at 12:11
Aaah, wonderful insightful answer! I thought using xargs was the same as typing a command in bash, but now I understand the difference.
– Mizar
Apr 11 at 12:11
1
1
There are other situations which do work like that (e.g.
su someuser -c "a long command"
always calls a shell; and ssh somehost a long command
deliberately joins and quotes all words so that the server could split them back through a shell).– grawity
Apr 11 at 12:30
There are other situations which do work like that (e.g.
su someuser -c "a long command"
always calls a shell; and ssh somehost a long command
deliberately joins and quotes all words so that the server could split them back through a shell).– grawity
Apr 11 at 12:30
add a comment |
Thanks for contributing an answer to Super User!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1424180%2fusing-xargs-with-pdftk%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown