2016-05-05 16 views
2

私はコマンドを実行して結果を解釈しようとしていますが、何をすれば "コマンドが見つかりません"というエラーが出ます。ここに私のコードの代表的なバージョンがあります:Bashサブシェル変数コマンドが見つかりません

devicename="emulator-5554" 
search=$(adb devices | grep -w "$devicename" | grep -w device) 

until $search; do 
    echo "Waiting..." 
    sleep 10 
done 

私は...私は...

search=$(adb devices | grep -w $devicename | grep -w device) 

search=$(adb devices | grep -w ${devicename} | grep -w device) 

含めて、考えることができるすべてのバリエーションを試してみました、すべて同じエラーを返します。

変数を正しく解釈するにはどうすればよいですか?

答えて

6

コードはadb|grep|grepパイプラインを一度だけ実行し、出力を$searchに保存します。 $searchからの読み取りは、パイプラインを再実行しません。

コマンドを保持する変数を使用しないでください。関数を使用します。

search() { 
    adb devices | grep -w "$devicename" | grep -qw device 
} 

until search; do 
    echo "Waiting..." 
    sleep 10 
done 

最後のgrepを消音するために-qを追加しました。見つかったものを知る必要はなく、何かを見つけただけです。その終了コードはすべて重要です。その出力は無関係です。

必要に応じて機能をインライン化できます。

until adb devices | grep -w "$devicename" | grep -qw device; do 
    echo "Waiting..." 
    sleep 10 
done 

または、必要に応じて$devicenameをパラメータにすることができます。

search() { 
    adb devices | grep -w "$1" | grep -qw device 
} 

until search "$devicename"; do 
    echo "Waiting..." 
    sleep 10 
done 
関連する問題