我最近一直在尝试以比打开多个终端实例并分别在脚本中执行更方便的方式并行运行脚本。
过去几天我一直在尝试学习如何使用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 个逻辑线程。
有人可以为此提供一个例子吗?
感谢您的宝贵时间。
最佳答案
类似于:
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'
关于c++ - 如何使用 gnu_parallel 运行多个可执行文件和/或 bash 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55905528/