[英]How to get output status of sqlplus command from shell/shell script?
[英]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.