Como usar comandos de histórico com o PROMPT_COMMAND de somente leitura?

2

Às vezes, faço login em um host que não controle e onde PROMPT_COMMAND é readonly . Existe alguma maneira de contornar isso para executar history comandos de qualquer maneira , por exemplo, usando PS1 ? Eu tentei PS1='$(history -a; history -c; history -r; echo finished)' - Ele imprime finished em cada prompt, mas parece que não funciona:

  1. Abra dois terminais A e B no mesmo host.
  2. No terminal A, execute um comando a .
  3. No terminal B, execute um comando b .
  4. Terminal B, pressione duas vezes.

Em um host onde PROMPT_COMMAND='history -a; history -c; history -r;' , isso resultará no terminal B mostrando a . Em um host em que PS1 comece com $(history -a; history -c; history -r; echo finished) , ele mostrará o comando que foi executado antes de os dois terminais serem abertos. A razão óbvia é que o comando em PS1 é executado em um subshell.

Outra alternativa é ignorar completamente o arquivo RC global:

bash --rcfile ~/.bashrc

No entanto, evitar o uso do valor padrão de PROMPT_COMMAND muito provavelmente não será aceito pelo administrador do sistema por motivos de política.

    
por l0b0 23.08.2012 / 16:55

1 resposta

1

Você pode executar os comandos de histórico em um manipulador de sinal, evitando o uso de um subshell. Então, tenha PS1 enviando o sinal apropriado:

trap 'history -a; history -c; history -r;' USR1
export PS1='$(kill -USR1 $$)'"$PS1"
    
por 21.04.2016 / 20:36