Bash Shell Do Loop Бесконечный цикл? - PullRequest
4 голосов
/ 27 октября 2011

В основном это мой код:

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 ]

7 голосов
/ 27 октября 2011

Вы не обновляете переменную bay внутри цикла где-то.Он устанавливается один раз и остается прежним.Вам нужно пересчитывать его каждый раз.

Либо установить bay в цикле, либо в условиях времени.

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
.....
4 голосов
/ 27 октября 2011

Еще СУХОЙ и вместо того, чтобы забивать прогу, я бы подождал, пока пользователь сначала что-нибудь сделает:

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"
...