我使用bash版本3.2.51(1)在字符串中找不到子串
我與工作鏈合作,並希望在舊工作完成時開始新工作。 因此,我檢查哪些作業當前正在運行,並且只有在找不到最後一次運行的作業編號時纔會提交新作業。
這裏是我的腳本的一部分:
Job_ID=$(msub -E fvcom.pbs)
# test whether job is still running
CONTINUE="just started"
# do this loop, until the CONTINUE variable is empty (i.e. job is finished)
until [ -z "$CONTINUE" ] ; do
# wait $WAIT seconds
sleep $WAIT
# query if job is still running
RUNNING=$(./show_my_run)
echo $RUNNING
echo $Job_ID
# check whether specific job is still running
# then job ID is present in job overview
if [[ $RUNNING == *"$Job_ID"* ]] ; then
CONTINUE="Job_ID found"
echo $CONTINUE
else
CONTINUE=""
echo "Job_ID not found"
fi
done
輸出是:
city.12345/1202110.batch.com kdd046運行4 0時59分14秒星期二7月4日
城市0.12345
JOB_ID沒有找到
很顯然,我可以看到,JOB_ID是當前和作業仍在運行... 該模式只認是否有Severa的l作業正在運行,模式在中間:
city.54321/1202133.batch.com kdd046運行4 00:59:14星期二七月4 city.12345/1202110.batch.com kdd046運行4 00: 56:19週二7月4日
city.12345
JOB_ID發現
我使用
也試過...
如果回聲 「$ RUNNING」 | grep -q「$ Job_ID」;然後
...
但具有相同的結果。
我在做什麼錯?
你確定從調用返回的字符串,你只包含文本字符?我想知道是否有一些非ascii字符隱藏在那裏,使比較混亂。特別是在你的評論如下,如果你手動設置變量,它的工作原理。 – mikea
我試圖用以下方法檢查:if [[$ RUNNING = * [![:ascii:]] *]];然後 echo「Running contains Non-ASCII」 else echo「運行時不包含非ASCII」 fi根據既沒有RUNNING也沒有Job_ID有非ASCII字符(我希望這是正確的方法來檢查這一點,我對於bash來說絕對是新的......) – Julia
你可以嘗試'聲明-p RUNNING'來轉儲變量的內容而不是'echo'它嗎?參考:https://stackoverflow.com/a/41409536/1168342 – Fuhrmanator