我在 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