最近我一直在尝试以比打开终端的多个实例并分别在脚本中执行更方便的方式并行运行脚本。
在过去的几天中,我一直在尝试学习如何使用gnu_parallel,但我仍然一无所知,希望有人可以提供直接的示例。
假设我有一个名为blah.exe的g ++编译代码和一个名为blah.sh的bash脚本,它们可以很好地单独运行,但是我想在不同的目录中执行它们。
我一直在阅读 https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Working-as-xargs--n1.-Argument-appending
和
https://www.biostars.org/p/182136/
但是我不太清楚语法
要连续运行这些,我会做:
for i in 1 2 3 4
mv ./blah.exe directory$i
cd directory$i
./blah.exe all
cd ..
end
类似地
for i in 1 2 3 4
mv ./blah.sh directory$i
cd directory$i
source ./blah.sh all
cd ..
end
我试图理解如何使用并行在一个命令中将此负载分为4个逻辑线程。
有人可以为此提供示例吗?
谢谢您的时间。
答案 0 :(得分:2)
类似的东西:
parallel --dry-run 'cd directory{}; ../blah.exe all; source ../blah.sh all' ::: {1..4}
无需复制/移动可执行文件,只需运行相同的文件即可。
此后无需cd ..
,因为这每次都是新过程。
请注意,这不是多线程,而是多处理。
如果要处理不连续目录号,可以使用:
parallel ... ::: {1..4} 6 7 {11..14}
如果要处理所有目录,可以使用:
printf "%s\0" */ | parallel -0 'cd {}; pwd'
如果要处理以FRED
开头的所有目录,则可以使用:
printf "%s\0" FRED*/ | parallel -0 'cd {}; pwd'