4

基本上这是我的代码:

bay=$(prog -some flags)
while [ $bay = "Another instance of this program is running, please exit it first" ]
do
echo "Awaiting Access to program"
do
.....

我有一个程序,由于它与我的硬件交互的方式,它一次只允许一个实例运行,当另一个实例运行时,它会弹出以下消息“该程序的另一个实例正在运行,请先退出” .

我需要能够运行多个使用相同程序的脚本,所以我决定使用上面的代码。我的问题是,当我运行我的两个脚本时,一个将获得对程序的访问权限并按需要运行,但另一个会注意到错误,然后卡在一个无限循环中,回显“等待访问程序”。

错过了什么?该语句是在执行 CLI 命令还是只是返回其原始执行?还是我的问题在哪里?

4

2 回答 2

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
.....
于 2011-10-27T13:59:11.303 回答
4

,而不是锤击编,我会等待用户先做一些事情:

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"
于 2011-10-27T14:41:55.400 回答