Histórico desfigurado

15

No modo gui, quando um usuário tem mais de um terminal aberto, como os terminais reescrevem o arquivo histórico desse usuário? A razão pela qual eu pergunto é porque, é bem possível que em cada um dos terminais o usuário acabe executando comandos diferentes. Então, o arquivo de histórico acaba salvando os comandos de todos os terminais ou somente do primeiro a ser aberto? Ou existe algum outro tipo de esquema que é empregado para lidar com essa situação?

    
por Jay 15.10.2010 / 15:45

3 respostas

11

Depende inteiramente de como o shell escolhe lidar com ele

Por padrão,

bash sobrescreverá o arquivo de histórico com o histórico local de cada shell à medida que ele sai, de modo que o último shell a sair vence. A opção histappend fará com que ela seja acrescentada ao histórico principal ( shopt -s histappend ).

zsh faz o mesmo por padrão e tem algumas opções para lidar com isso:

  • appendhistory - O histórico de cada shell é anexado ao arquivo de histórico principal à medida que o shell é encerrado
  • incappendhistory - O arquivo de histórico mestre é atualizado toda vez que uma linha é executada em qualquer shell, em vez de esperar até que o shell saia
  • sharehistory - Como incappendhistory , mas também obtém alterações do arquivo de histórico principal em todos os shells em execução, para que você possa executar um comando em um shell e, em seguida, pressionar Up em outro shell e vê-lo
por 15.10.2010 / 15:58
0

Eu originalmente recebi essa ideia do livro "Unix Power Tools" da O'Reilly.

No meu .profile defino:

export HISTFILE=$HOME/.sh_hist.$$

Toda vez que meu .profile é lido, recebo um novo arquivo de histórico chamado com o PID da minha sessão. Se eu tiver vários logins, cada login receberá um arquivo de histórico exclusivo. Funciona em ksh e bash .

Se você está apenas abrindo novos terminais em uma sessão X, eles geralmente não são shells de login, mas você pode configurá-los para atuar como shells de login. Por exemplo, rxvt +ls iniciará rxvt como um shell de login. Verifique os documentos para qualquer terminal que você esteja usando.

Além disso, a menos que você esteja usando um arquivo .logout ou .bash_logout (ou algum outro meio) para limpar, você acabará tendo uma carga de .sh_hist arquivos.

    
por 15.10.2010 / 19:32
0

tcsh : set savehist = (5000 merge) mescla

    
por 14.05.2013 / 04:35