Como posso ver o histórico do Bash em mais de uma sessão de terminal no Ubuntu? [duplicado]

11

Possível duplicado: os
arquivos de histórico podem ser unificados no bash?

Eu uso o Ubuntu Server 9.10 e gostaria de poder ver meu histórico do bash por mais de uma sessão de terminal. Ou seja, meus últimos 200 comandos, mais ou menos, mesmo se eu tiver desconectado.

Quando uso o history, apenas vejo todos os comandos da minha sessão real do terminal. Como posso ver mais histórico de comandos do Bash? Existe alguma configuração específica para o bash que eu deva alterar dos valores padrão no Ubuntu?

Eu não tenho um ~/.bash_historyarquivo. Mas eu tenho um ~/.bashrccom HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredupseHISTCONTROL=ignoreboth

echo $HISTFILE
/home/sanoj/.bash_history
echo $HISTSIZE
500
echo $HISTFILESIZE
500
echo $HISTCONTROL
ignoreboth

ATUALIZAÇÃO: Agora estou tentando o Ubuntu Server 10.10 no VirtualBox. Se eu desligar o VirtualBox sem o comando shutdown, na próxima vez em que inicializar, os comandos da última sessão não serão salvos no arquivo de histórico.

Os comandos serão salvos apenas se eu desligar a máquina com o comando shutdown. Por exemplo, desligamento -P 0.

Este deve ser o motivo do meu problema. Então, tenho que descobrir como salvar o histórico de comandos com mais frequência. Por exemplo, após cada comando.

Jonas
fonte
O que você ganha se você faz echo $HISTSIZEe echo $HISTFILESIZE? Meu (Ubuntu) ~/.bashrctem as mesmas HISTCONTROLlinhas que a sua, com morte cerebral, pois a segunda substitui a primeira e os valores devem ser separados por dois pontos, não separados por vírgula. Se o fizer set -o, mostra uma linha que diz "histórico ativado"?
Pausado até novo aviso.
Eu entendo 500com echoambas as variáveis ​​ehistory on
Jonas
a segunda instrução HISTCONTROL é a que você está recebendo, não a primeira. embora ignoreboth seja uma abreviação para ignoredups + ignorespace, portanto esse provavelmente não é o problema.
quack quixote
1
esta é uma duplicata: superuser.com/questions/37576/…
warren
1
@warren: bom achado. concordo, parece exatamente o que Sanoj está pedindo.
quack quixote

Respostas:

6

Você pode usar

history -a

anexar imediatamente o histórico na memória ao arquivo do histórico. Uma sessão do terminal não pode ver a outra, a menos que isso seja feito ou a outra seja encerrada.

Você pode usar

history 200 | less

para ver esse número de entradas.

Além de HISTSIZEver a entrada na página de manual do Bash referente HISTFILESIZE.

Pausado até novo aviso.
fonte
history -a´ doesn't do anything for me, and not história 200 | less menos também, mas atualizei minha pergunta com mais informações. Obrigado mesmo assim.
Jonas
Eu acho que encontrei uma razão agora. O histórico não é salvo, a menos que eu faça um desligamento limpo. Veja minha nova pergunta: unix.stackexchange.com/questions/3330/…
Jonas
6

Após o logout, o histórico é anexado ao arquivo ~/.bash_history. Dê uma olhada lá.

Por padrão, ele lembrará dos seus últimos 500 comandos. Se você quiser economizar mais definir a variável HISTSIZEno ~/.bashrc.

Eu também adiciono ignoredupsa HISTCONTROL(com HISTCONTROL=$HISTCONTROL:ignoredup). Isso faz com que comandos consecutivos duplicados sejam salvos apenas uma vez.

Dê uma olhada no man 1 bashque mais você pode ajustar sobre a história.

Benjamin Bannier
fonte
Obrigado pela sua resposta. Mas eu não tenho um ~/bash_historyarquivo, e não HISTSIZEem ~/.bashrcmas eu tenho HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredupse HISTCONTROL=ignorebothe É Ubuntu Server, se isso importa.
Jonas
1
@Snoj Observe o .em ~/.bash_history. E, para HISTSIZEisso, basta usar o valor padrão de 500 entradas.
Benjamin Bannier
Sim, mas não tenho nenhum ~/.bash_historyarquivo no meu sistema. Eu costumava ls -averificar.
Jonas
@ Sanoj Então, talvez não seja o padrão. O nome do arquivo é armazenado na $HISTFILEvariável, portanto echo $HISTFILE, você verá onde procurar.
Benjamin Bannier
echo $HISTFILEme dá /home/sanoj/.bash_history- estranho. Talvez não esteja ativado por razões de segurança?
Jonas
1

o histórico do bash geralmente é carregado quando o shell começa a ser executado e é salvo quando é encerrado normalmente. Você pode usar history -ae history -nsubstituir isso, mas não automaticamente, a menos que abuse $PROMPT_COMMANDou algo semelhante.

Ignacio Vazquez-Abrams
fonte
0

Sanoj, isso realmente deveria "apenas funcionar"; Não acho que exista algo especial que você precise fazer para permitir isso. Parece que algo está interferindo no curso normal dos eventos.

Eu procuraria em / etc / profile, / etc / bashrc (ou talvez /etc/bash.bashrc de acordo com algumas fontes), ~ / .bash_profile, ~ / .bashrc, ~ / .bash_login, ~ / .bash_logout, para ver se houver algo que possa estar afetando o histórico (talvez grep -i histem cada um dos arquivos acima).

... Em particular, eu me pergunto se você tem algo em ~ / .bash_logout que remove o arquivo.

Como alternativa, é possível que algo esteja substituindo a $HOMEvariável?

Zac Thompson
fonte