我使用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 Running 4 00:59:14 Tue Jul 4
city.12345
找不到Job_ID
显然我可以看到Job_ID存在并且作业仍在运行... 只有在运行多个作业并且模式位于中间的某个位置时才会识别该模式:
city.54321 / 1202133.batch.com kdd046 Running 4 00:59:14 Tue Jul 4 city.12345 / 1202110.batch.com kdd046 Running 4 00:56:19 Tue Jul 4
city.12345
发现Job_ID
我也尝试过使用
...
如果回显“$ RUNNING”| grep -q“$ Job_ID”;然后
......
但结果相同。
我做错了什么?
答案 0 :(得分:1)
使用declare -p Job_ID
我发现在使用echo
未显示的变量Job_ID的开头有一个换行符。
现在,我添加了一个更改,以摆脱这个额外的行,它的工作原理:
Job_ID=$(msub -E fvcom.pbs | perl -p -e 'chomp' )
答案 1 :(得分:-1)
试试这个:
RUNNING="city.12345/test"
Job_ID="city.12345"
if [[ "$RUNNING" =~ ".*$Job_ID*" ]]; then
echo "match"
fi
(编辑:现在,如果X包含Y)