Execute o comando para uma saída específica de um comando

3

Estou interessado em executar um determinado comando toda vez que qualquer programa que eu executar produza "falha de segmentação". Basicamente, eu tenho um script bash que grava o timestamp em um arquivo de log e também faz algumas outras coisas.

Para o meu curso, um módulo solicita que façamos isso para cada exercício. Claro que posso criar um script e executar cada programa de dentro do script, mas fiquei me perguntando se existe alguma maneira de generalizar isso.

O que eu quero é realmente para qualquer programa que seja executado por um usuário , se a saída contiver o comando "segmentation fault" execute

    
por Bujanca Mihai 16.02.2016 / 21:00

1 resposta

2

O status de saída de um programa segfaulting é definido como 139 pelo Bash (portanto, isso se aplica ao menos aos programas que não definiram um manipulador para o SIGSEV receber um SIGSEV durante a execução no Bash: ele deve caber no caso de uso):

$ 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

Você pode definir PROMPT_COMMAND como algo assim em ~/.bashrc :

PROMPT_COMMAND='[ $? -eq 139 ] && printf "SIGSEV received\n"'

Alterando printf "SIGSEV received\n" para o comando que você deseja executar.

$ PROMPT_COMMAND='[ $? -eq 139 ] && printf "SIGSEV received\n"'
$ printf '\n'

$ ./foo
Segmentation fault (core dumped)
SIGSEV received
    
por kos 16.02.2016 / 21:29