Como faço para detectar um comando está sendo executado e, em seguida, execute um comando adicional após o comando atual

1

Eu quero que o shell detecte que eu executei um comando específico e, depois de executar o comando, execute outro comando.

Por exemplo: Quando todos executo o comando: git commit -m " "

Primeiro, termine o comando acima e execute outro comando, como: python check.py

Estou inclinado a modificar o arquivo .bash_rc . Estou certo?

Obrigado antecipadamente.

    
por 100rabh 11.08.2018 / 15:34

1 resposta

0

Use o comando trap no bash.

trap [-lp] [[arg] sigspec ...]

If a sigspec is DEBUG, the command arg is executed before every simple command ...

Agora, seu único problema é que o comando trap é executado antes e não depois do comando. Mas você pode referir o comando a ser executado com $BASH_COMMAND , e você pode fazer com que o comando não seja executado.

extdebug

  1. If the command run by the DEBUG trap returns a non-zero value, the next command is skipped and not executed.

Portanto, defina um trap DEBUG, se você detectar o comando em que está interessado, execute $BASH_COMMAND , execute seu próprio comando e faça com que o comando original não seja executado.

Editar

Experimente este exemplo:

#!/bin/bash                                                                                                                                                                                                                                                                     

function myfunc ()
{
    if test "$BASH_COMMAND" = "echo 1"; then
        $BASH_COMMAND
        echo "runing after 'echo 1'"
        return 1
    else
        return 0
    fi
}

shopt -s extdebug
trap "myfunc" DEBUG

echo 1
echo 2

Executando este script:

$ bash test.sh
1
runing after 'echo 1'
2
    
por 11.08.2018 / 17:03