使用并行运行脚本而无需输入

使用并行运行脚本而无需输入

我正在尝试使用 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。可以是任意顺序。

答案2

相关内容