Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Curso de Inglês Online

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

Compartilhamento do histórico do bash entre múltiplas sessões

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 14 de julho de 2010

Em um ambiente de janelas, frequentemente temos diversos terminais em execução, e cada um deles com seu histórico de comandos. Suponhamos que eu tenha uma janela com centenas de comandos executados, e outra com apenas cinco comandos. Se eu encerrar a segunda sessão primeiro, o histórico é sobrescrito e eu ficou com apenas os cinco comandos da segunda janela registrados. O ideal seria que o histórico fosse comum e dinâmico, ou seja, cada comando executado ficando disponível para todas as sessões em execução.

Executando o comando

  tail -f .bash_history

em uma das janelas, vemos os comandos sendo executados. Mas se fecharmos uma outra janela, vejam o que acontece:

  tail: .bash_history: arquivo truncado

Perdemos tudo que estava lá. A sessão que foi fechada truncou o arquivo .bash_history.

Para eliminar este problema, precisamos fazer com que a shell bash acrescente imediatamente, ao arquivo do histórico, os comandos executados em todas as sessões. Para isto, especificamos, no arquivo .bashrc, a seguinte diretiva:

  history -a

Eu acho esta forma de trabalho bastante conveniente. Eu considero particularmente irritante ter uma sessão de histórico para cada janela aberta. Não sei porque o padrão não é assim.

Aproveitando, no Twitter, tem um usuário chamado @bashtips, que fornece dicas curtas de bash. Vale a pena acompanhar.

Veja a relação completa dos artigos de Rubens Queiroz de Almeida

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 2.99/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (1035 votos)

Opinião dos Leitores

Cristiano Amaral
27 Jul 2010, 16:24
/etc/profile
rogerio machado
27 Jul 2010, 13:45
legal, pelas dicas, mas qual é mais sensata utilizar?
@Cristiano
o comando que voce passou vai no .bashrc ou em outro lugar?
Fernando Roxo
14 Jul 2010, 11:23
Na verdade o truncamento é normal por várias razões, mas nada deverá ser perdido a não ser os comandos mais antigos.

O "history" (em princípio) é mantido em memória até o final da seção. Ao final dela por padrão o histórico é descarregado no arquivo de histórico (~/.history no Bourne ou Korn shell, ~/.bash_history no Bash ou mesmo de acordo com a variável $HISTFILE). O padrão é simplesmente fazer a adição no arquivo, mas como existe um limite para o crescimento do arquivo (500 linhas por padrão no Bash ou o que estiver estabelecido na variável $HISTFILESIZE), por esta razão o arquivo é recriado para manter o limite.

Um pequeno experimento, abra um terminal e use o comando :

watch "(ls -il .bash_history;wc -l .bash_history)"

Este comando vai ficar monitorando o arquivo de histórico quanto ao tamanho em bytes e o número de linhas. Abra um outro terminal e use alguns comandos, por exemplo:

$ ls /tmp
.....
$ date
.....
$ exit

O que você verá é que provavelmente a data de alteração do arquivo de histórico vai se alterar e o tamanho em bytes também pode se alterar, mas o número de linhas deve permanecer constante. Este número constante é garantido reescrevendo as últimas $HISTFILESIZE linhas após acrescebtar o histórico da seção atual. Isto significa que os comandos mais antigos serão perdidos. Como o 'inode' não mudou no 'ls' o arquivo foi reescrito na mesma posição que estava.

Eu trabalho com vários (por vezes dezenas) de terminais abertos ao mesmo tempo. Para evitar perda de histórico muito recente eu estabeleço o histórico com 1000 linhas e evito gravar linhas imediatamente repetidas, colocando no ~/.profile ou ~/.bashrc :

export HISTCONTROL=ignoredups


Espero que ajude.

Cristiano Am,aral
14 Jul 2010, 07:51
Ou "shopt -s histappend"
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script
Lan University

Submarino.com.br

Encontre imóveis, apartamentos e casas a venda no Imobilien
Saiba mais

 

 

Procure pela casa ou apartamento ideal à venda ou para aluguel na busca inteligente do Imohoo
Buscar imóveis