/dev/null 2>&1 Abort trap: 6 对于应该崩溃的测-6ren">
gpt4 book ai didi

macos - 在 shell 脚本中抑制信号输出,如 "Abort trap: 6",用于应该崩溃的测试

转载 作者:行者123 更新时间:2023-11-29 09:29:53 25 4
gpt4 key购买 nike

当程序崩溃时,从 bash 启动的一些有用的输出 Abort trap: 6:

$ ./crash-if-correct > /dev/null 2>&1
Abort trap: 6

对于应该崩溃的测试用例,这会创建看起来错误的输出。如何抑制这种情况?

我怀疑它不是 shell(在我的例子中是 bash),因为通过 bash 源的 ack 'trap:' 没有显示任何内容。

简单的复现方式:

$ cat <<EOF > abort.c
main()
{
abort();
}
EOF

$ cc -w -o abort abort.c
$ sh -c ./abort > /dev/null 2>&1
Abort trap: 6

最佳答案

解决方案是在子 shell 中运行子进程:

$ cc -w -o abort abort.c
$ $(./abort)
$

这适用于 OSX。

注意如果./abort输出文本,就会执行

$ cat hello-abort.c
main()
{
puts("Hello");
abort();
}
$ cc -w -o hello-abort hello-abort.c
$ ./hello-abort
Hello
Abort trap: 6
$ $(./hello-abort)
bash: Hello: command not found # <== Danger
$ exec 3>&1; $(./hello-abort >&3); exec 3>&-
Hello
$

在zsh中,最后一条命令的返回值为134,追加|| true 使其变为 0 的命令。

Credits

关于macos - 在 shell 脚本中抑制信号输出,如 "Abort trap: 6",用于应该崩溃的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34964332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com