我有一个包含主机名的数组,我想用所有主机名并行执行另一个脚本。起初我用 for 循环迭代它。但是我希望它是并行的,并且我使用了等待命令,但是我不能拥有动态数量的主机。
./sub.sh ${arr[0]} &
./sub.sh ${arr[1]} &
./sub.sh ${arr[2]}
wait
现在我需要一个可以执行数组所有元素的函数。你有什么解决办法吗?
最佳答案
像这样使用 GNU Parallel:
# Generate test data
arr=($(seq 10))
# Check it looks good
echo "${arr[@]}"
1 2 3 4 5 6 7 8 9 10
# Process all elements of the array - just using "echo"
parallel -k echo {} ::: "${arr[@]}"
1
2
3
4
5
6
7
8
9
10
其他有用的选项,用于parallel
参数:
-j N
一次运行 N 个作业--progress
会显示一个进度条-k
将保持输出顺序--tag
将标记输出(根据您的主机)
如果以上内容不清楚如何适用于您的具体示例,我建议您这样做:
parallel --tag -k ./sub.sh {} ::: "${arr[@]}"
关于linux - 并行执行命令的动态数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48822871/