可以使 GNU Parallel 输出以逐行模式运行时执行的命令行吗?

可以使 GNU Parallel 输出以逐行模式运行时执行的命令行吗?

假设我在 file 中有一个命令列表cmd_file

我通过以下方式运行这些命令:

cat cmd_file | parallel -k -I {} "{}"

其中一个命令失败。所有命令都使用完全相同的 CLI 工具和不同的输入。

现在,我必须一次运行一个命令来查找错误命令,方法是将命令列表替换为命令生成器循环(涉及更多):

for ...; do
  # assemble the vars for the command
  echo "<command>"
  <command>
done

例如,是否有一种机制可以并行显示失败的命令或 stderr 上的执行顺序?

答案1

您可以指导parallel将执行的每个命令打印到标准输出或标准错误。从man页面:

-v  Print the job to be run on stdout (standard output).
    Can be reversed with --silent. See also -t.


-t  Print the job to be run on stderr (standard error).

所以也许:

for ...; do
  # assemble the vars for the command
  echo "<command>"
done |
parallel -v -k

或者如果您已经cmd_file准备好:

parallel -v -k < cmd_file

或类似的东西会满足您的需求。

答案2

如果命令设置了退出值,--joblog就是你的朋友。

答案3

例如,是否有一种机制可以并行显示失败的命令或 stderr 上的执行顺序?

GNU Parallel 20220722 有--colour-failed

parallel --tag --colour-failed "echo foo {}; {}" ::: true true false false true

相关内容