0

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 0PID=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 の最初の値を保持するため、毎回最初のファイルの名前が出力されます。)foreval$f

それを修正する方法はありますか?

4

1 に答える 1