繁体   English   中英

如何从Mac上的Shell脚本获取输出?

[英]How to get output from shell script on mac?

我想在shell脚本中运行命令并检查其输出。如果它具有某些文本,我想将全局变量设置为特定的字符串。以下是我到目前为止所做的事情。 命令~/Library/Android/sdk/tools/android list | grep 'The "android" command is deprecated. ~/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脚本中,单引号内的所有内容都不受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将返回零,否则返回非零。

请尝试直接运行命令(而不使用MKCOMMAND变量):

RESP=$(~/Library/Android/sdk/tools/android list | grep 'The "android" command is deprecated.')
echo $RESP
...

这种(快速!)黑客可能会绕过您可能遇到的一些Bash 报价问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM