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


10

我正在尝试与GNU并行运行脚本的许多实例,但是脚本不带参数。

如果我只是执行“ parallel foo.sh”,则会得到以下信息:

parallel: Warning: Input is read from the terminal. Only experts do this on purpose. Press CTRL-D to exit.

Answers:


10

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

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 产生一个以换行符分隔的数字序列(从1到10)。
  • -n0选项告诉parallel忽略输入序列中的值。我们只关心序列的长度,而不是内容。即使不使用数字,该命令仍将执行十次。

另一个例子:

parallel -n0 echo -n 'x' ::: {1..5}

这个怎么运作:

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

相比于:

parallel echo -n ::: {1..5}

这个怎么运作:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.