【发布时间】:2021-03-25 19:16:08
【问题描述】:
我正在运行这个:
cat Samples.txt | xargs -P 8 -I {} ./idk.sh {}
其中 Samples.txt 提供目录和文件的 idk.sh 名称。 不幸的是,样本的某些部分没有请求的文件夹和/或文件。 如何让 xargs 忽略这些情况并继续迭代剩余的样本?
【问题讨论】:
标签: linux loops unix xargs exit-code
我正在运行这个:
cat Samples.txt | xargs -P 8 -I {} ./idk.sh {}
其中 Samples.txt 提供目录和文件的 idk.sh 名称。 不幸的是,样本的某些部分没有请求的文件夹和/或文件。 如何让 xargs 忽略这些情况并继续迭代剩余的样本?
【问题讨论】:
标签: linux loops unix xargs exit-code
更改脚本idk.sh 以检测参数不存在并且在这种情况下不以 255 退出。
或者,创建一个包含 idk.sh 并且不以 255 退出的脚本。
./idk.sh "$@"
x=$?
[ $x -eq 255 ] && exit 254
exit $x
或者只是抑制所有错误以使脚本更简单,然后将其作为提供给 xargs 的命令的一部分提供:
xargs -P 8 -I {} sh -c './idk.sh {} ; exit 0'
【讨论】:
sh -c 'commands...',将像运行 shell 脚本一样运行 commands...。 exit 0 将导致脚本以代码 0 退出。否则它将以最后一个命令的代码退出。 ; 用于分隔命令。
cat Samples.txt | xargs -P 8 -I {} find . -name {} -exec ./idk.sh '{}' \;
一个选项可能是 xargs 来查找和 -exec。
【讨论】:
我还找到了提供的替代答案,我希望社区可以投票选出最好的答案:
xargs -P 8 -i sh -c "./idk.sh {} || true"
我不知道这个是如何工作的,我只是复制了它...解释或学习资源将不胜感激,因为我没有在我找到的任何 xargs 备忘单中看到它。
【讨论】: