shopt -s extdebug em .bashrc não funciona em arquivos de script

0

Eu estou escrevendo um script bash echoo.sh com a intenção de ecoar comandos antes que eles sejam executados. Eu fonte o script dentro de .bashrc . Mas isso não afeta outros scripts bash que eu executo. Abaixo está o código que eu tenho até agora:

echoo.sh

#!/usr/bin/env bash
shopt -s extdebug
get_hacked () {
    [ -n "$COMP_LINE" ] && return  # not needed for completion
    [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # not needed for prompt
    local this_command=$BASH_COMMAND;
    echo $this_command;
}
trap 'get_hacked' DEBUG

Quando eu abro um shell e executo qualquer comando - ele funciona. Mas para coisas em um arquivo de script, não funciona.

ALGUMAS OUTRAS TENTATIVAS:

  1. Eu tentei pesquisar o arquivo .bashrc no script de teste - não funcionou.
  2. Eu obtive echoo.sh dentro do script de teste e funcionou.

Então, estou tentando entender

  1. Por que não funciona se eu só forneço meu script em .bashrc para coisas que são executadas em scripts?
  2. Por que não tenta mais # 1 funcionar quando o número 2 funciona?

E, finalmente, o que posso fazer de tal forma que eu não precise fonte echoo.sh em todos os arquivos de script para que isso funcione. Posso criar meu script em um só lugar e alterar algumas configurações para que ele funcione em todos os cenários.

    
por Sam Thomas 06.02.2018 / 20:03

1 resposta

0

Eu testei todas as suas tentativas, e funcionou no archlinux, bash versão 4.4.12. Mas eu tive que abrir um novo shell interativo, então o novo ~/.bashrc poderia ser originado.

Para shells não interativos, você também pode tentar configurar um ~/.bashenvrc e definir export BASH_ENV=$(realpath ~/.bashenvrc) em ~/.bashrc .

Agora, o script ~/bashenvrc será originado toda vez que você iniciar um shell não interativo.

Eu testei isso também com daemonize 1.7.7-1

felicidades

    
por 06.02.2018 / 22:32