0
我已經寫了一個腳本After.sh
推遲一個作業要啓動另一個正在運行的作業完成後:計劃作業一個在其他Linux後
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
關機的PC PID = 5327完成。即使我可以像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}
或eval ${*:2}
,但他們失敗了(sh
未能再次找到for
命令,eval
保持的$f
整個循環的第一個值,所以打印的第一個文件的每一次名。 )
你有什麼想法如何解決它?
保存複雜的命令到一個文件中,使它是可執行的,將它的路徑作爲After.sh的參數。 – choroba
@choroba謝謝,我意識到這一點,但我喜歡我的腳本足夠靈活,因爲每一次我需要不同的命令 – Ali
您將不得不深入引用和反斜槓。你不能用'wait'來代替嗎? – choroba