Answers:
刚刚找到了一个有趣的答案,尽管它的用处取决于您要运行的命令。
如果您使用xargs基本上汇编命令列表,则可以通过告诉xargs回显该命令,然后通过管道传递到bash来获得此行为。
例如,如果您要删除可能存在或不存在的事物的列表:
# presume this will fail in a similar way to your command
cat things_to_delete | xargs -n1 delete_command_that_might_exit
# instead echo the commands and pipe to bash
cat things_to_delete | xargs -n1 echo delete_command_that_might_exit | bash
之所以有效,是因为,首先,xargs仅调用echo,因此不会看到任何错误。其次,因为bash的默认行为是在失败的语句后继续执行。
为了更具体地说明我的情况,我使用它来从AWS ElasticBeanstalk中删除一堆旧应用程序版本,如下所示:
aws elasticbeanstalk describe-application-versions --application-name myapp |\
jq -r '.ApplicationVersions | sort_by(.DateCreated) | .[0:-10] | .[].VersionLabel' |\
xargs -n1 \
echo aws elasticbeanstalk delete-application-version \
--delete-source-bundle --application-name myapp --version-label |\
bash
如果您使用xargs
with find
,请使用-exec
选项find
代替:
find . -name '*.log' -exec somecommand {} \;
xargs
可以并行运行命令。凉。如果只想减少命令调用的次数,则-exec
有一个+
参数。
sh -c
wors我!