了解 GNU Parallel --nonall 和 --onall 选项及其与 --delay 的行为

问题描述 投票:0回答:1

我试图了解 GNU Parallel 中 --nonall 和 --onall 选项的行为,以及它们如何与 --delay 选项交互。我遇到过一些行为不符合预期的情况,希望得到一些澄清。

  1. --nonall 与 --onall 当我使用 --jobs 1 运行以下命令时:
parallel --nonall --jobs 1 echo "1" ::: a a a
parallel --onall --jobs 1 echo "1" ::: a a a

结果是一样的。那么有什么区别呢?

  1. --延迟与--nonall: 当我运行以下命令时:

parallel --nonall --jobs 1 --delay 5s echo "1" ::: a a a

每个输入的命令执行之间似乎没有任何延迟。但是,当我使用 --onall 而不是 --nonall 时,延迟会按预期应用。

parallel --onall --jobs 1 --delay 5s echo "1" ::: a a a

您能否解释一下为什么 --delay 选项与 --nonall 一起使用时似乎没有效果,但与 --onall 一起使用时却按预期工作?

gnu-parallel
1个回答
0
投票

您将进入尚未经过充分测试的领域。因此,您会发现一些可能被视为错误的令人惊讶的行为。

首先:

--(n)onall
在本地运行没有任何意义。他们只与服务器打交道(
--sshlogin/-S
):

# "echo 1" is run on all servers
$ parallel -S server1,server2 --nonall echo 1
1
1

# "echo 1 a" "echo 1 b" "echo 1 c" are run on all servers
$ parallel -S server1,server2 --onall echo 1 ::: a b c
1 a
1 b
1 c
1 a
1 b
1 c

确实

--nonall
也对命令行上的参数做出反应:

$ parallel -S server1,server2 --nonall echo 1 ::: a b c
1 a
1 b
1 c
1 a
1 b
1 c

您可以认为这是一个错误,或者您正在以未定义的方式使用它:应该忽略参数。

如果您在标准输入 (stdin) 上给出参数,则输入确实会被

--nonall
:

忽略
# Standard input (stdin) is ignored
$ (echo a;echo b;echo c) | parallel -S server1,server2 --nonall echo 1
1
1
# Standard input (stdin) is used
$ (echo a;echo b;echo c) | parallel -S server1,server2 --onall echo 1
1 a
1 b
1 c
1 a
1 b
1 c

目前

--delay
被忽略。

您可以随意在邮件列表上发布您认为

--delay
--(n)onall
结合时应该做什么。如果您这样做,还请说明
--sshdelay
的行为应有何不同。

© www.soinside.com 2019 - 2024. All rights reserved.