After.sh
別の実行中のジョブが終了した後に、あるジョブの開始を延期するスクリプトを作成しました。
echo "Waiting job $1 to be finished..."
while ps -p $1 >/dev/null; do sleep 1; done ;
echo "Job $1 finished."
echo "Now running job ${*:2}..."
${*:2}
echo "Job ${*:2} finished."
After.sh 5327 shutdown 0
PID=5327 のジョブが終了した後、PC をシャットダウンするように実行します。のように実行することもできますがAfter.sh "5327 5778 5935" shutdown 0
、この方法では、すべてのジョブ 5327、5778、および 5935 が最初に終了するまで待機します。
私の問題は、スクリプトの引数としてより複雑なジョブをフィードしたい場合です。たとえば、次のようになります。
After.sh 5327 for f in *; do echo $f; done
現在、エラーで実行されます: for: command not found
。${*:2}
スクリプト内のコマンドをsh ${*:2}
orに置き換えようとしましたeval ${*:2}
が、失敗しました (コマンドのsh
検索に再び失敗し、ループ全体で for の最初の値を保持するため、毎回最初のファイルの名前が出力されます。)for
eval
$f
それを修正する方法はありますか?