如何从Mac上的Shell脚本输出



我希望在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 引用您可能遇到的问题。

最新更新