Bash
帶有 while 循環的 Bash 腳本,它等待文件被刷新,但如果超過時間門檻值則終止
我對 bash 非常了解,所以如果這很明顯可以解決,我深表歉意,如果需要更多詳細資訊,請告訴我。下面的腳本是啟動 python 工作流並等待在工作流結束時更新 results.json 文件的較大腳本的一部分。
我試過用
{ sleep 1m kill $$ }&
但這會在 results.json 文件在 1 分鐘內刷新時生成錯誤:
殺死:(90015) - 沒有這樣的過程
這是腳本:
#! /bin/bash export DISPLAY=:0.0 export outputfile=results.json if [[ ! -e $outputfile ]]; then touch $outputfile fi OldTimestamp=$(date -r $outputfile) { sleep 1m kill $$ }& NewTimestamp=$OldTimestamp; while [ "$NewTimestamp" = "$OldTimestamp" ]; do sleep 0.1 NewTimestamp="$(date -r $outputfile)" done
如果你想要做的就是擺脫那個kill: (90015) - 沒有這樣的程序錯誤,你可以在殺死它之前檢查程序是否仍在執行:
{ sleep 1m ps -p $$ > /dev/null && kill $$ }&
但我實際上根本不會使用 kill 。您可以只跟踪您在 while 循環中進行了多少次互動,並在適當次數的迭代後中斷循環:
NewTimestamp=$OldTimestamp; iterations=0 while [ "$NewTimestamp" = "$OldTimestamp" ] && [ $iterations -lt 600 ]; do sleep 0.1 NewTimestamp="$(date -r $outputfile)" let iterations++ done
如果您想在文件未更新的情況下使用非零退出程式碼退出,您可以在之後添加:
if [ "$NewTimestamp" = "$OldTimestamp" ] ; then echo "results.json was not updated" >&2 exit 1 fi
或類似的。