针对命令的特定输出执行命令

针对命令的特定输出执行命令

我每次都对执行某个命令感兴趣任何我运行的程序输出“分段错误”。基本上,我有一个 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

相关内容