2015-02-10 142 views
0

不管我看起来如何做,我似乎无法得到命令的输出被分配给bash中的变量。虽然我的脚本运行发现没有任何错误,我没有得到我想要的结果:Bash - 获取命令的输出

# Prompt if the user needs Qt 
echo "" 
echo "Checking for qt5-default." 
echo "" 

OUTPUT="$(sudo dpkg -s qt5-default)" 

echo "OUTPUT:" 
echo $OUTPUT 

... 

OUTPUT将永远回响什么。但是,如果我这样做:

OUTPUT="$(ls -la)"

然后,它的工作原理。我想知道为什么。


这里是我的意思是:

Failure

正如你所看到的,“输出:”字符串来命令输出后,这意味着输出没有被存储在变量,但是在主外壳中运行,这让我感到困惑。

下面是当OUTPUT="$(ls -la)"会发生什么:

Success

在这种情况下, “输出:” 来之前,显示出echo命令工作正常。

任何想法?

+4

听起来就像它使用标准错误而不是标准输出。在命令的末尾尝试'2>&1'。 – 2015-02-10 00:45:15

回答

2
OUTPUT=$(dpkg -s qt5-default 2>&1) 

应该做你想做的。正如Etan所指出的那样,dpkg的输出是stderr,而不是stdout。

+0

是的,这个工程。 – 2015-02-10 01:23:04

+0

如果它能完成这项工作,你会介意接受答案吗? :) – tink 2015-02-10 01:48:36

+0

握住你的马人,我就在它上面! – 2015-02-10 05:20:54