如何同时执行多个.command文件?

如何同时执行多个.command文件?

我在 Mac OS X 上有一个.command文件文件夹(常规任务),我想同时执行它。

此刻,我已经逐一迭代目录中的每个文件来执行它。使用类似的东西:

#!/bin/bash
LAUNCHLOG=~/Desktop/My\ Automation/Resources/Logs/_AutoLaunchAgent.txt
mkdir -p ~/Desktop/My\ Automation/Resources/Logs/
mkfile -n 0k "$LAUNCHLOG"
chmod 0777 "$LAUNCHLOG"
FILES=`find -f ~/Desktop/My\ Automation/Resources/Temp/`;
while read -r line; do
    "$line" >>"$LAUNCHLOG"
done <<< "$FILES"
sleep 10

上面的代码正在工作,但是它非常慢...出于速度原因,我想立即执行命令(目录中的每个项目)。

这些命令都是相互独立的,不需要通信,如果我手动执行此操作,一切都会正常工作,并且我会得到很大的速度提升......

实现这一目标的最佳方法是什么?我尝试在 while 循环中使用括号,试图在每次迭代时在新的子 shell 中执行,但该进程仍然一次执行一个文件。

答案1

在后台启动脚本将阻止循环等待并执行您想要的操作:

while read -r line; do
    (bash "$line" >>"$LAUNCHLOG") &
done <<< "$FILES"

不过,日志将混合在您的日志文件中......

答案2

为什么不尝试一下/usr/sbin/periodic呢?您可以使用 period.conf 来控制日志记录或将输出重定向到日志文件。

    /usr/sbin/periodic ~/Desktop/My\ Automation/Resources/Temp/ >> /path/to/logfile

相关内容