我每次都对执行某个命令感兴趣任何我运行的程序输出“分段错误”。基本上,我有一个 bash 脚本,它将时间戳写入日志文件并执行其他一些操作。
对于我的课程,一个模块要求我们为每个练习都这样做。当然我可以编写一个脚本并在脚本中运行每个程序,但我想知道是否有任何方法可以概括这一点。
我真正想要的是任何程序那是由用户运行,如果输出包含“段错误”,则执行命令
答案1
程序段错误的退出状态由 Bash 设置为139
(因此这至少适用于在 Bash 中运行时未定义 SIGSEV 处理程序的程序接收 SIGSEV:它应该适合您的使用情况):
$ cat foo.c
#include <stdio.h>
int main() {
char *ptr = NULL;
*ptr = 'a';
return 0;
}
$ gcc foo.c -o foo
$ ./foo
Segmentation fault (core dumped)
$ echo $?
139
您可以设置PROMPT_COMMAND
为如下内容~/.bashrc
:
PROMPT_COMMAND='[ $? -eq 139 ] && printf "SIGSEV received\n"'
更改printf "SIGSEV received\n"
为您想要运行的命令。
$ PROMPT_COMMAND='[ $? -eq 139 ] && printf "SIGSEV received\n"'
$ printf '\n'
$ ./foo
Segmentation fault (core dumped)
SIGSEV received