Bash Shell Do While Loop Infinite循环?

时间:2011-10-27 13:47:50

标签: linux bash shell while-loop do-while

基本上这是我的代码:

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命令还是只是重新执行其原始执行?或者我的问题在哪里?

2 个答案:

答案 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"