Salva automaticamente o histórico de comandos bash na sessão de tela [duplicado]

3

Eu me conecto a uma sessão de tela. Depois de fazer algumas coisas eu desanexar. Então, em history | tail , vejo apenas screen -r e os comandos anteriores e não os comandos executados na sessão de tela. Basicamente, a história mostra coisas diferentes quando a sessão de tela está em execução e depois de ser desanexada.

Como posso ter certeza de que os comandos na sessão de tela são anexados ao bash history?

Config: tela 4.0.3, bash 4.1.2

    
por user13107 08.11.2013 / 09:39

1 resposta

4

Diferentes shells mantêm seu próprio histórico na memória até serem liberadas (gravadas) no arquivo de histórico, o que geralmente acontece quando você sai do shell, mas você pode sobrescrevê-lo da seguinte forma:

export PROMPT_COMMAND="history -a; history -c; history -r; ${PROMPT_COMMAND}"

Isso significa que toda vez que um novo prompt é emitido (ou seja, sempre que você executa um comando), primeiro o histórico é anexado ao arquivo, então ele é limpo da memória do shell atual e o shell atual é recarregado. o arquivo.

Isso significa que cada shell da sua conta no sistema, seja na tela ou em várias janelas ou outros, retém e exibe todo o histórico de comandos de todos os outros shells.

Coloque a linha no seu .bashrc e você pode aumentar o tamanho do seu histórico adicionando também:

export HISTSIZE=5000

24/11/2017 EDIT: Acabei de perceber que há um problema com meu PROMPT_COMMAND: ele se referencia, o que significa que se você repetidamente source .bashrc , ele adicionará mais e mais cópias de history -a; history -n à variável. Então, o que você quer fazer é algo assim:

export PROMPT_COMMAND='history -a; history -n; <whatever other commands you want...>'

    
por 08.11.2013 / 23:13