2014-03-04 94 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