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"
À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:
a . b . 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.
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"