Como posso aplicar o "shopt -s extdebug" ao meu shell por padrão?

1

Estou tentando criar um verificador pré-execução no bash (usando bash-preexec.sh )

Para falhar o comando quando o gancho pré-execução falhar, eu preciso executar shopt -s extdebug (que falha no comando quando o comando DEBUG do trap retorna um RC diferente de zero).

Se eu executar shopt -s extdebug no meu shell como um comando, isso funcionará perfeitamente (o verificador preexec acabou de aparecer em "OK" em um arquivo contendo a palavra "FAIL", então o comando não deve ser executado):

> grep shopt .bashrc
> bash
bash-4.1$ echo TEST2
TEST2   <=== Expected, since I didn't turn on extdebug yet
bash-4.1$ shopt -s extdebug > /dev/null 2>&1
bash-4.1$ echo TEST2
bash-4.1$ # WHAT WAS EXPECTED. Command failed to execute.

No entanto, quando eu adiciono o comando ao meu .bashrc, ele não tem efeito:

> grep shopt .bashrc
shopt -s extdebug > /dev/null 2>&1
> bash
bash: /usr/share/bashdb/bashdb-main.inc: No such file or directory
bash: warning: cannot start debugger; debugging mode disabled
bash-4.1$ echo TEST2
TEST2

O que estou fazendo de errado e como posso executá-lo no .bashrc (preciso executá-lo sempre que o usuário faz login)?

    
por DVK 09.01.2018 / 00:31

1 resposta

1

OK, descobri a resposta.

    set -o functrace > /dev/null 2>&1

é necessário (além de shopt -s extdebug ) para que a funcionalidade funcione em sub-shells. E de alguma forma, .bashrc é tratado como supershell do shell interativo real, de certo modo, se você não incluir isso, ele não terá efeito no prompt de comando interativo.

Então, você precisa adicionar o comando a .bashrc

    
por 09.01.2018 / 16:34

Tags