【问题标题】:xargs: how do I ignore error code 255 and continue iterating?xargs:如何忽略错误代码 255 并继续迭代?
【发布时间】: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


    【解决方案1】:

    更改脚本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'
    

    【讨论】:

    • 对于包装解决方案:我是否有一个包含您共享的代码的脚本(例如 Wrapped.sh)? aka 调用 idk.sh 并告诉它不要以 255 退出?
    • " sh -c ' ./idk.sh {} :exit 0' " 我对 sh -c 是什么和 ; 0号出口
    • 是的,就是这样。 sh -c 'commands...',将像运行 shell 脚本一样运行 commands...exit 0 将导致脚本以代码 0 退出。否则它将以最后一个命令的代码退出。 ; 用于分隔命令。
    【解决方案2】:
    cat Samples.txt | xargs -P 8 -I {} find . -name {} -exec ./idk.sh '{}' \;
    

    一个选项可能是 xargs 来查找和 -exec。

    【讨论】:

    • 如果任何名称包含目录或者是绝对路径,这将不起作用。
    【解决方案3】:

    我还找到了提供的替代答案,我希望社区可以投票选出最好的答案:

    xargs -P 8 -i sh -c "./idk.sh {} || true"
    

    我不知道这个是如何工作的,我只是复制了它...解释或学习资源将不胜感激,因为我没有在我找到的任何 xargs 备忘单中看到它。

    【讨论】:

      猜你喜欢
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 2018-03-16
      • 2015-05-12
      • 2014-05-18
      相关资源
      最近更新 更多