Mac OS Xに同時に実行したい.command
ファイルフォルダ(一般タスク)があります。
今、ディレクトリ内の各ファイルを1つずつ繰り返し実行しました。次のようなものを使用してください。
#!/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ループで括弧を使用して各反復ごとに新しいサブシェルで実行しようとしましたが、プロセスはまだ一度に1つのファイルを実行します。
答え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