使用并行在没有输入的情况下运行脚本

use*_*840 12 linux gnu

我正在尝试使用 GNU 并行运行脚本的许多实例,但该脚本没有参数。

如果我只是执行 'parallel foo.sh' 我得到这个:

parallel: Warning: Input is read from the terminal. Only experts do this on purpose. Press CTRL-D to exit.
Run Code Online (Sandbox Code Playgroud)

jwf*_*arn 11

假设您要运行十次,此语法将起作用:

parallel -n0 foo.sh ::: {1..10}
Run Code Online (Sandbox Code Playgroud)

parallel需要一定长度的输入序列 ( ::: {1..10}) 并且您需要忽略输入序列 ( -n0)的内容,您只关心它的长度。

您的原始命令:parallel foo.sh, 不包含指示您想要多少并行度的输入序列。神秘的警告告诉您parallel将开始侦听终端以获取输入序列,这可能不是您想要的。

这是教程示例:

seq 10 | parallel -n0 my_command my_args
Run Code Online (Sandbox Code Playgroud)

这个怎么运作:

  • parallel总是从某处获取输入序列。它可以是内联空格分隔序列,前面是:::OR 来自文件或类似文件的源(如管道)的换行分隔序列。在这个例子中,输入序列来自管道。
  • seq 10 产生一个以换行符分隔的数字序列,从 1 到 10。
  • -n0选项告诉并行忽略输入序列中的值。我们只关心序列的长度,而不是它的内容。即使不使用数字,该命令仍将执行十次。

另一个例子:

parallel -n0 echo -n 'x' ::: {1..5}
Run Code Online (Sandbox Code Playgroud)

这个怎么运作:

  • 输入序列是内联的。
  • {1..5} 产生一个空格分隔的数字序列,从一到五。
  • -n0忽略序列值(我们'x'每次都回显字符串。)
  • 输出: xxxxx

相比于:

parallel echo -n ::: {1..5}
Run Code Online (Sandbox Code Playgroud)

这个怎么运作:

  • 输入序列是内联的。
  • {1..5} 产生一个空格分隔的数字序列,从一到五。
  • 输入序列中的每个值都用作 的参数echo。订单不保证。
  • 输出:43215。可以是任何顺序。