基本上这是我的代码:
bay=$(prog -some flags)
while [ $bay = "Another instance of this program is running, please exit it first" ]
do
echo "Awaiting Access to program"
do
.....
我有一个程序,它只允许一个实例一次运行,因为它与我的硬件交互的方式,当另一个实例正在运行时,它会发出以下消息“此程序的另一个实例正在运行,请退出它首先是“。
我需要能够运行多个脚本,这些脚本将使用相同的程序,所以我决定使用上面的代码。我的问题是,当我运行我的两个脚本时,一个人将获得对该程序的访问并按需运行,但另一个将注意到该错误,然后陷入无限循环,回显“等待访问程序”。
错过了什么? Statement是执行CLI命令还是只是重新执行其原始执行?或者我的问题在哪里?
答案 0 :(得分:7)
您没有在某个地方更新循环内的bay
变量。它被设置一次并保持不变。你需要每次都重新计算它。
在循环中设置bay
,或者在while的条件下设置。
while [ `prog -some flags` = "Another instance of this program is running, please exit it first" ]
编辑:
从您的评论中,您希望以后能够引用此输出。你可以回到你所拥有的,但在你的阻塞循环内,将你的bay=$(prog -some flags)
命令放在循环中。它会留在你身边供你使用。
bay=$(prog -some flags)
while [ $bay = "Another instance of this program is running, please exit it first" ]
do
echo "Awaiting Access to program"
bay=$(prog -some flags)
done
.....
答案 1 :(得分:4)
更多DRY而不是锤击前卫,我会等待用户先做一些事情:
while true
do
bay=$(prog -some flags)
case "$bay" in
"Another instance of this program is running, please exit it first")
read -p "Awaiting Access to program. Close it and hit enter: " x ;;
*) break ;;
esac
done
echo "Results: $bay"