我正在修改现有的bash脚本,并且在使while循环正常运行时遇到一些麻烦。这是原始代码
while ! /usr/bin/executable1
do
# executable1 returned an error. So sleep for some time try again
sleep 2
done
我想将此更改为以下
while ! /usr/bin/executable1 && ! $(myfunc)
do
# executable1 and myfunc both were unsuccessful. So sleep for some time
sleep 2
done
executable1在成功时返回0,在失败时返回1。我理解bash中的“true”计算结果为0,这就是为什么原始脚本会一直循环直到可执行文件返回成功为止
因此myfunc编码如下
myfunc ()
{
# Check if file exists. If exits, return 0, If not, return 1
if [ -e someFile ]; then
return 0
fi
return 1
}
我注意到我的新while循环似乎没有调用executable1。它总是调用myfunc()然后立即退出循环。我做错了什么?
我尝试了各种编码while循环的方法(使用(()),[],[[]]等),但似乎没有什么能解决它
答案 0 :(得分:1)
您不需要$(...)
来调用函数,只是为了捕获其标准输出。你只想要
while ! /usr/bin/executable1 && ! myfunc
do
sleep 2
done
请注意,myfunc
也可以更简单地编写
myfunc () {
[ -e someFile ]
}
或甚至(在bash
中)
myfunc () [[ -e someFile ]]
无论哪种方式,几乎不值得单独定义myfunc
;只需使用
while ! /usr/bin/executable1 && ! [[ -e someFile ]]
do
sleep 2
done
使用until
循环也可能更简单:
until /usr/bin/executable1 || [[ -e someFile ]]; do
sleep 2
done