According to the man page, xargs will quit if one of the execution lines exits with an error of 255:
If any invocation of the command exits with a status of 255, xargs will stop immediately without reading any further input. An error message is issued on stderr when this happens.
How can I get xargs to not do this?
I have a 1500 or so line batch job that I want to run, 50 lines at a time. I was finding that it was always dying at a certain line, and not completing the job. Not good!
An even better question, the question describing what I am trying to do, is:
How can I run a 1500 line batch script, 50 lines at a time, so that it does not quit the job in the middle, and so that the output is captured to a log file of some kind?
Similar to
larsks
answer but more explicit:You could wrap the perl script with another simple bash script:
This will call real-command passing it all the parameters that you pass to this fake-command and it will always return a 0 exit code (that means it is always successful) and xargs will never stop with this.
Just found a fun answer to this one, though its usefulness will depend on the command you're trying to run.
If you're using xargs to basically assemble a list of commands, you can get this behavior by telling xargs to echo the command, then piping to bash.
For example, if you're trying to delete a list of things that may or may not exist:
This works because, first, xargs is only ever calling echo, so it won't see any errors. Then second, because bash's default behavior to continue execution after a failed statement.
To be more specific about my case, I was using this to remove a bunch of old application versions from AWS ElasticBeanstalk like so:
You could write your xargs invocation to mask the return codes of your command lines. With something like the following,
xargs
will never see exit codes return by somecommand:Following construction works for me:
Even if svn upgrade failed on some element, process was continued
If you were using
xargs
withfind
, use the-exec
option offind
instead: