我正在尝试使用 GNU parallel 运行脚本的许多实例,但该脚本不接受任何参数。
如果我仅执行“parallel foo.sh”,我会得到以下结果:
parallel: Warning: Input is read from the terminal. Only experts do this on purpose. Press CTRL-D to exit.
答案1
假设您想要运行十次,则此语法将起作用:
parallel -n0 foo.sh ::: {1..10}
parallel
需要一定长度的输入序列(::: {1..10}
)并且您需要忽略输入序列的内容(-n0
),只关心它的长度。
您的原始命令:parallel foo.sh
,不包含输入序列来指示您想要的并行度。神秘的警告告诉您,parallel
将开始监听终端的输入序列,这可能不是您想要的。
以下是教程示例:
seq 10 | parallel -n0 my_command my_args
怎么运行的:
parallel
总是从某个地方获取输入序列。它可以是内联空格分隔序列,前面是:::
或来自文件或类似文件源(例如管道)的换行符分隔序列。在此示例中,输入序列来自管道。seq 10
生成以换行符分隔的从一到十的数字序列。- 该
-n0
选项告诉 parallel 忽略输入序列中的值。我们关心的只是序列的长度,而不是其内容。即使不使用数字,该命令仍将执行十次。
另一个例子:
parallel -n0 echo -n 'x' ::: {1..5}
怎么运行的:
- 输入序列是内联的。
{1..5}
产生一个由空格分隔的一至五的数字序列。-n0
'x'
忽略序列值(我们每次都回显字符串。)- 输出:
xxxxx
相比于:
parallel echo -n ::: {1..5}
怎么运行的:
- 输入序列是内联的。
{1..5}
产生一个由空格分隔的一至五的数字序列。- 输入序列中的每个值都用作 的参数
echo
。不保证顺序。 - 输出:
43215
。可以是任意顺序。