Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 对于循环,shell脚本确实会等待命令的执行进行迭代_Bash_Shell_For Loop_Exec - Fatal编程技术网

Bash 对于循环,shell脚本确实会等待命令的执行进行迭代

Bash 对于循环,shell脚本确实会等待命令的执行进行迭代,bash,shell,for-loop,exec,Bash,Shell,For Loop,Exec,我有一个带有for循环的shell脚本。循环在迭代之前是否在其体中等待命令的执行 提前谢谢 这是我的密码。这些命令是按顺序执行还是并行执行 for m in "${mode[@]}" do cmd="exec $perlExecutablePath $perlScriptFilePath --owner $j -rel $i -m $m" $cmd eval "$cmd" done 假设您没有对命令进行后台处理,那么是的 例如

我有一个带有for循环的shell脚本。循环在迭代之前是否在其体中等待命令的执行

提前谢谢

这是我的密码。这些命令是按顺序执行还是并行执行

for m in "${mode[@]}" 
    do 
        cmd="exec $perlExecutablePath $perlScriptFilePath --owner $j -rel $i -m $m"
        $cmd
        eval "$cmd"
    done

假设您没有对命令进行后台处理,那么是的

例如:

for i in {1..10}; do cmd; done
在继续循环之前,等待
cmd
完成,而:

for i in {1..10}; do cmd &; done
没有

如果您想并行运行命令,我建议将循环更改为以下内容:

for m in "${mode[@]}" 
do 
    "$perlExecutablePath" "$perlScriptFilePath" --owner "$j" -rel "$i" -m "$m" &
done
parallel $perlExecutablePath $perlScriptFilePath --owner $j -rel $i -m {} ::: "${mode[@]}" 
这会在后台运行每个命令,因此不会等到一个命令完成后再启动下一个命令


另一种选择是查看,它是为此目的而设计的。

使用GNU并行,它看起来像这样:

for m in "${mode[@]}" 
do 
    "$perlExecutablePath" "$perlScriptFilePath" --owner "$j" -rel "$i" -m "$m" &
done
parallel $perlExecutablePath $perlScriptFilePath --owner $j -rel $i -m {} ::: "${mode[@]}" 
GNU Parallel是一个通用的并行程序,它使得在同一台机器上或在您有ssh访问权的多台机器上并行运行作业变得非常容易。它通常可以代替
for
循环

如果您有32个不同的作业要在4个CPU上运行,并行化的直接方法是在每个CPU上运行8个作业:

GNU Parallel会在完成时生成一个新进程—使CPU保持活动状态,从而节省时间:

安装

如果您的发行版没有打包GNU Parallel,那么您可以进行个人安装,而不需要root访问。通过执行以下操作,可在10秒内完成:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
有关其他安装选项,请参阅

了解更多信息

请参阅更多示例:

观看介绍视频:

浏览本教程:


注册电子邮件列表以获得支持:

感谢Tom的努力