2015-02-10 158 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