我正在尝试编写一个bash脚本,而这样做是困在这里的:
我不明白为什么会这样:
MSG=$(pwd)
echo $MSG
输出:
/home/harsh/source/git/trunk
但这不是:
MSG=$(java -version)
echo $MSG
输出:
BLANK
请帮忙!
答案 0 :(得分:2)
某些命令最后可能需要2>&1
才能获得任何输出:
MSG=$(java -version 2>&1)
它将任何标准错误(2)发送到重定向标准输出(1)的任何位置。
答案 1 :(得分:1)
错误消息通常写入标准错误流stderr
而不是标准输出流stdout
。如果java -version
生成错误而不是您预期的错误(打印版本),则可能会stderr
生成错误。版本信息也可以打印到stderr
。
命令替换$()
从stdout
中的$()
获取java
的输出,并将其替换为其位置。如果出现错误,这可能不算什么。如果您是在终端上输入此内容,则仍应看到终端中stderr
的{{1}}的任何输出(例如错误消息)。