首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >找不到Bash子Subshell变量命令

找不到Bash子Subshell变量命令
EN

Stack Overflow用户
提问于 2016-05-05 19:51:41
回答 1查看 1.2K关注 0票数 2

我试图运行一个命令并解释结果,但是无论我做什么,我都会得到一个“命令未找到”错误。下面是我的代码的代表版本:

代码语言:javascript
运行
复制
devicename="emulator-5554"
search=$(adb devices | grep -w "$devicename" | grep -w device)

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

我试过所有我能想到的变体,包括.

代码语言:javascript
运行
复制
search=$(adb devices | grep -w $devicename | grep -w device)

代码语言:javascript
运行
复制
search=$(adb devices | grep -w ${devicename} | grep -w device)

.但都会返回相同的错误

如何才能正确解释变量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-05 19:54:05

您拥有的代码只运行一次adb|grep|grep管道,并将输出存储在$search中。从$search读取数据不会重新运行管道。

不要使用变量来保存命令。使用函数。

代码语言:javascript
运行
复制
search() {
    adb devices | grep -w "$devicename" | grep -qw device
}

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

请注意,我添加了-q以使最终的grep保持沉默。你不需要知道它发现了什么,只需要知道它发现了什么。它的退出代码才是最重要的;它的输出是无关的。

如果需要,可以内联该函数。

代码语言:javascript
运行
复制
until adb devices | grep -w "$devicename" | grep -qw device; do
     echo  "Waiting..."
     sleep 10
done

或者,如果您愿意,也可以将$devicename作为参数。

代码语言:javascript
运行
复制
search() {
    adb devices | grep -w "$1" | grep -qw device
}

until search "$devicename"; do
     echo  "Waiting..."
     sleep 10
done
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37059112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档