2016-05-05 41 views
2

我試圖運行一個命令並解釋結果,但是無論我做什麼,我都會得到一個「command not found」錯誤。下面是我的代碼代表的版本:Bash子shell變量命令沒有找到

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 

請注意,我添加了-q來沉默最終的grep。你不需要知道它找到了什麼,只是它發現了一些東西。其退出代碼是重要的;它的輸出是無關緊要的。

如果需要,可以內聯函數。

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