如何解决如何在GNU并行环境中将参数发送到bash脚本
我想使用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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。