找不到Bash Subshel​​l变量命令

时间:2016-05-05 19:51:41

标签: 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)

...,但都返回相同的错误。

如何才能正确解释变量?

1 个答案:

答案 0 :(得分: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