我试图运行一个命令并解释结果,但是无论我做什么,我都会得到一个“命令未找到”错误。下面是我的代码的代表版本:
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)
.但都会返回相同的错误
如何才能正确解释变量?
发布于 2016-05-05 19:54:05
您拥有的代码只运行一次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
https://stackoverflow.com/questions/37059112
复制相似问题