我试图将命令集的输出设置为变量但是当我使用命令替换运行它时,该命令返回一个空行
[user@host bin]$ ./MyAppRead 4
Segmentation fault (core dumped)
[user@host bin]$ BALLS=$(./MyAppRead 4)
[user@host bin]$ echo $BALLS
[user@host bin]$
我期待将BALLS设置为"分段错误(核心转储)"但它是空白的?
- 编辑 -
已更改以反映以下建议。但仍然空白
[user@host bin]$ ./MyAppRead 4
Segmentation fault (core dumped)
[user@host bin]$ BALLS=$(./MyAppRead 4 2>&1)
[user@host bin]$ echo $BALLS
[user@host bin]$
答案 0 :(得分:5)
$()
捕获标准输出,而不是标准错误。分段错误错误将转为标准错误。
如果你想要两者,你可以这样捕捉:
BALLS=$(./MyAppRead 4 2>&1)
答案 1 :(得分:4)
分段错误是一个信号,如果你编程得到它,它将被终止,bash会将分段错误信息打印到shell( not program )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