2014-03-04 355 views
0

我試圖讓設置爲變量的命令的輸出,但是當我用命令替換運行,該命令將返回一個空行Bash輸出到變量不起作用?

[[email protected] bin]$ ./MyAppRead 4 
Segmentation fault (core dumped) 
[[email protected] bin]$ BALLS=$(./MyAppRead 4) 
[[email protected] bin]$ echo $BALLS 

[[email protected] bin]$ 

我期待球被設置爲「分段故障(核心傾銷)「但它是空白的?

-EDIT-

已更改爲反映以下建議。但仍然回來空白

[[email protected] bin]$ ./MyAppRead 4 
Segmentation fault (core dumped) 
[[email protected] bin]$ BALLS=$(./MyAppRead 4 2>&1) 
[[email protected] bin]$ echo $BALLS 

[[email protected] bin]$ 

回答

4

段錯誤是一個信號,如果你的程序得到它,它會被終止,bash將打印段錯誤消息殼( 不是程序)stderr。

您可以通過捕獲具有陷阱的分段故障信號來獲得此輸出。在文件script.sh

/bin/bash 
# script.sh 
trap "Segmentation fault (core dumped)" 11 
./MyAppRead 4 

寫這篇文章,然後執行此

chmod +x script.sh 
BALLS=$(./script.sh 2>&1) 
echo $BALLS 
+0

這是有道理的。謝謝!實際上,我決定觸發一個成功的消息,而不是一個段錯誤,並且在stdout上工作得很好。但很好知道將來使用 – Dss

5

$()捕獲標準輸出,而不是標準錯誤。分段錯誤錯誤將導致標準錯誤。

如果你想同時,可以同時捕獲這樣:

BALLS=$(./MyAppRead 4 2>&1) 
+0

上面編輯,以顯示與您的諮詢新的命令,但仍然是相同的空白輸出 – Dss