我希望在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
从您的上一次编辑中,很明显您不是从终端执行脚本,而是从中执行一行。
在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
如果找到字符串,否则将返回零。
尝试直接直接运行命令(不使用MKCOMMAND
变量(:
RESP=$(~/Library/Android/sdk/tools/android list | grep 'The "android" command is deprecated.')
echo $RESP
...
这个(快速!(hack可能会绕过一些bash 引用您可能遇到的问题。