Histórico de comandos no Zsh

46

Como o Zsh acompanha o histórico de comandos?

Eu vejo dois arquivos no meu diretório pessoal: .zhistory e .zsh_history . Qual a diferença entre eles? Os arquivos parecem conter all do meu histórico. O Zsh continua anexando linhas a uma delas para sempre ? Isso não faria pesquisa de histórico muito lenta?

Posso fazer com segurança esses links simbólicos desses arquivos para outro local? (por exemplo, um repositório git para acompanhar as alterações no histórico)

    
por Amelio Vazquez-Reina 30.01.2014 / 20:04

1 resposta

65

O Zsh armazena linhas de entrada (possivelmente com informações de hora) no arquivo indicado pela variável HISTFILE . Este deve ser um nome de arquivo absoluto (caso contrário, ele será interpretado em relação a qualquer diretório que esteja atualizado no momento).

O Zsh não possui um valor padrão integrado para HISTFILE . A distribuição zsh vem com um assistente de configuração para novos usuários que possui o valor ~/.histfile embutido, então é isso que os usuários zsh obtêm por padrão. Oh-my-zsh vem com HISTFILE=.zhistory preset. Então parece que você tentou zsh tanto com a configuração padrão como com o oh-my-zsh. Verifique seu .zshrc (ou as datas do arquivo) para ver qual deles você está usando no momento.

Como o zsh abre o arquivo e, portanto, o que acontece se for um link simbólico depende de várias opções.

  • Se uma das opções append_history (definido por padrão), < a href="http://zsh.sourceforge.net/Doc/Release/Options.html#index-INC_005fAPPEND_005fHISTORY"> inc_append_history ou share_history está definido ou quando o histórico é salvo explicitamente com fc -AI , zsh é anexado ao arquivo existente.
    Observe que, mesmo sob essas configurações, o zsh ocasionalmente sobrescreve o arquivo conforme descrito abaixo para reduzi-lo ao tamanho.
  • Caso contrário, se a opção hist_save_by_copy estiver definida (é definida por padrão desde o zsh 5.0, mas não existe no 4.2), o zsh grava um arquivo temporário e o move no lugar quando completo. Nesse caso, se o arquivo de histórico for um link simbólico, o novo arquivo substituirá o link simbólico.
  • Caso contrário, o zsh sobrescreve o arquivo existente no lugar.

Em vez de apontar zsh para um link simbólico, defina HISTFILE para onde você quiser que o arquivo de histórico seja.

Quantas linhas de histórico são mantidas são configuradas através das variáveis HISTSIZE e SAVEHIST . HISTSIZE é o número máximo de linhas que são mantidas em uma sessão e SAVEHIST é o número máximo de linhas que são mantidas no arquivo de histórico.

Para obter algum histórico salvo, você precisa definir HISTFILE e SAVEHIST , já que o valor padrão de SAVEHIST é 0. Você também pode querer aumentar HISTSIZE (a partir de zsh 5.0 , o padrão é apenas 30).

    
por 31.01.2014 / 02:36