如何在 GNU 并行中将参数发送到 bash 脚本

How to send arguments to bash script in GNU parallel

我想使用 GNU parallel 并行执行一些命令,但我不知道如何将参数发送到我的 bash 脚本。

我的bash_script.sh:

scp .zip xxx@1.com:~/
scp .zip xxx@2.com:~/
scp .zip xxx@3.com:~/
scp .zip xxx@4.com:~/
scp .zip xxx@5.com:~/

我可以将参数发送到bash_script并按顺序执行它。

bash bash_script.sh argument

但是如何并行呢?

parallel -a bash_script argument

也许是这样的:

for server in server1 server2 server 3
do
   scp "" $server: &
done

& 导致作业在后台 运行。如果我不明白你的要求,请澄清。

对我有用的解决方案是将命令写入文本文件(例如:commands.txt)并执行 parallel:

parallel -j 2 < commands.txt

parallel 可以并行执行单个 进程 ,但脚本通常旨在 运行 作为单个进程。

你可以做到

parallel scp "" xxx@{}1.xyz.com: ::: {1..5}

或者如果您真的想将脚本文件拆分成单独的行

sed "s#$1##g" bash_script.sh | parallel

如果脚本只是静态文本,您可以让 parallel 逐行阅读它;但是 parallel 在该上下文中没有 </code> 的值,因此我们将其替换,然后通过管道将替换的行用于并行执行。</p> <p>切线地,注意 <a href="">proper variable quoting</a> 并且不要在 Bash 脚本上放置 <code>.sh 扩展名。 (基本上不要在任何脚本上添加任何扩展名。)

bash_script.sh

parallel scp "" xxx@{}.com: ::: {1..5}

用法:

bash bash_script.sh argument