我正在尝试运行命令并解释结果,但无论我做什么,我都会收到“未找到命令”错误。这是我的代码的代表版本:
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)
...,但都返回相同的错误。
如何才能正确解释变量?
答案 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