我希望在shell脚本中运行一个命令并检查它的输出。如果它有某些文本,我想将一个全局变量设置为特定的字符串.Below是我到目前为止所做的。
命令~/Library/Android/sdk/tools/android list | grep 'The "android" command is deprecated.
在终端中工作,但它似乎不能在shell脚本中工作。
我在这里缺少什么?
#!/bin/bash
Android_Command=''
MKCOMMAND='~/Library/Android/sdk/tools/android list | grep 'The "android" command is deprecated.''
RESP=$($MKCOMMAND)
echo $RESP
if [ '$RESP'=='The "android" command is deprecated.' ]; then
Android_Command='Version2'
else
Android_Command='Version1'
fi
以下是我得到的输出
~/Library/Android/sdk/tools/android: No such file or directory
答案 0 :(得分:0)
从上次编辑开始,很明显你没有从终端执行脚本,而是只是从它执行一行。
在shell脚本中,单引号内的任何内容都不受shell扩展的影响。话虽如此,~
和|
都无法引用。
重定向由shell在执行之前创建。这意味着无法执行MKCOMMAND
,因为管道|
将被视为命令android
的参数。
那么我们如何处理这种脚本呢?不要引用任何重定向。
#!/bin/bash
if ~/Library/Android/sdk/tools/android list | grep -q 'The "android" command is deprecated.'; then
Android_Command='Version2'
else
Android_Command='Version1'
fi
if
语句接受复杂语句。 grep -q
如果找到字符串则返回零,否则返回非零。
答案 1 :(得分:-1)
尝试直接运行命令(不使用MKCOMMAND
变量):
RESP=$(~/Library/Android/sdk/tools/android list | grep 'The "android" command is deprecated.')
echo $RESP
...
这个(快速!)hack可能会绕过你可能遇到的一些Bash 引用问题。