首页 > 解决方案 > 将 ksh for 循环转换为异步

问题描述

我正在使用传统的 sh for 循环,

for a in $ab; do 
   source a.ksh
   source b.ksh
done

循环中的每个脚本都从数组中获取输入,执行直到完成。通常&&用于附加后台进程。

任何关于使每次迭代都无需等待即可运行的想法都会很棒

标签: for-loopoptimizationparallel-processingksh

解决方案


了解你的外壳。您的循环可能没有意义。确定您使用的是哪个 shell,因为您同时标记了 Bourne shell ( sh) 和 Korn shell ( ksh)。

source不是 Korn-shell 原生的,而是其他非 Korn shell 原生的,例如cshbash

在 pdksh 或某些发行版上,source可能只是 Korn shell 内置命令的别名,该命令在当前环境.中执行指定的脚本(或函数) 。(即没有单独的PID,因此同步执行)。

如果您想启动一个单独的环境(即一个单独的进程,不同的 PID),您必须省略source并在命令行末尾附加一个与号 (&)。与符号告诉 Korn shell 启动一个单独的进程并在该进程中异步运行您的脚本(而不是等待它完成)。

&因此,如果您想将两个单独的命令行作为并发任务(即异步)运行,则每个命令行的最后一个字符都必须是 a 。


推荐阅读