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

ハードウェアとの対話方法により、一度に1つのインスタンスのみを実行できるプログラムがあります。別のインスタンスが実行されている場合、「このプログラムの別のインスタンスが実行されています。最初に終了してください」というメッセージが表示されます。 。

この同じプログラムを利用する複数のスクリプトを実行できる必要があるため、上記のコードを使用することにしました。私の問題は、2つのスクリプトを実行すると、1つはプログラムにアクセスして希望どおりに実行されますが、もう1つはエラーに気づき、「プログラムへのアクセスを待機中」とエコーする無限ループでスタックすることです。

何かを逃したことがありますか?ステートメントは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

より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"
于 2011-10-27T14:41:55.400 に答える