问题描述
我想使用GNU parallel来并行执行一些命令,但是我不知道如何将参数发送到我的bash脚本。
我的bash_script.sh:
scp $1.zip xxx@1.com:~/
scp $1.zip xxx@2.com:~/
scp $1.zip xxx@3.com:~/
scp $1.zip xxx@4.com:~/
scp $1.zip xxx@5.com:~/
我可以将参数发送到bash_script并按顺序执行。
bash bash_script.sh argument
但是如何并行执行呢?
parallel -a bash_script argument
解决方法
parallel
可以并行执行各个进程,但是脚本通常旨在作为单个进程运行。
你可以做
parallel scp "$1" xxx@{}1.xyz.com: ::: {1..5}
或者如果您真的想将脚本文件分成几行
sed "s#\$1#$1#g" bash_script.sh | parallel
如果脚本只是静态文本,则可以简单地parallel
逐行阅读;但是parallel
在这种情况下没有$1
的值,因此我们将其替换,然后用管道将替换的行通过管道进行并行执行。
切切地注意proper variable quoting,不要在Bash脚本上添加.sh
扩展名。 (基本上,不要在任何脚本上添加任何扩展名。)
也许是这样的:
for server in server1 server2 server 3
do
scp "$1" $server: &
done
&
使作业在后台运行。如果我不理解您的要求,请澄清。
对我有用的解决方案是将命令写入文本文件(例如,commands.txt)并执行 parallel :
parallel -j 2 < commands.txt
,
bash_script.sh
parallel scp "$1" xxx@{}.com: ::: {1..5}
用法:
bash bash_script.sh argument