如何在mac上获取shell脚本的输出?

时间:2017-06-28 22:29:23

标签: bash macos shell terminal

我希望在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

2 个答案:

答案 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 引用问题。