Por que a coluna de duração em .zsh_history geralmente é 0, embora o comando "history -D" a exiba?
Depois de testar esta resposta para Qual é a finalidade da coluna com '0' após o carimbo de data / hora numérico em .zsh_history? Percebo que embora o history -D
comando exiba o tempo de execução do comando, a coluna de duração ainda ~/.zsh_history
exibe 0
.
Qual é a causa disso?
É porque o ~/.zsh_history
arquivo é atualizado no comando inicial e não é atualizado depois, ou obtém history -D
a hora de um local separado, talvez da memória ou de outro arquivo?
Eu tive a mesma pergunta depois de responder sua pergunta anterior, quando analisei minha própria configuração. Ao responder sua pergunta anterior, eu estava usando uma
zsh
sessão shell com as configurações padrão e olhei o arquivo de histórico após ativar oEXTENDED_HISTORY
. Pude ver a duração sendo gravada corretamente após o encerramento da sessão do shell (que é quando o histórico da memória é gravado no$HISTFILE
arquivo por padrão). No meu próprio$HISTFILE
arquivo, porém, notei que as durações eram todas zero, embora eu usasseEXTENDED_HISTORY
.Depois de consultar a
zsh-users
lista de discussão, descobri que, como também uso aSHARE_HISTORY
opção shell (para compartilhar o mesmo histórico de comandos entre várias sessões simultâneas do shell), a duração não é gravada no arquivo de histórico. Isso ocorre porque aSHARE_HISTORY
opção faz com que o evento do histórico seja gravado na execução do comando, e não no término do comando ou da sessão do shell, quando a duração está disponível. Esse comportamento é semelhante à ativaçãoINC_APPEND_HISTORY
, mas também lê novos comandos de outras sessões no histórico do shell atual.No entanto, existe outra opção de shell
INC_APPEND_HISTORY_TIME
(observe o final_TIME
), que é incompatível comSHARE_HISTORY
eINC_APPEND_HISTORY
, que anexa os eventos do histórico ao arquivo da maneira que esperamos, após o término de um comando.O
zshoptions(1)
manual diz o seguinte:Se você quiser usar
INC_APPEND_HISTORY_TIME
e ainda poder compartilhar o histórico entre várias sessões simultâneas de shell, a documentação daSHARE_HISTORY
opção sugere usarfc -RI
em um shell para ler os eventos de outros shells quando estes forem necessários:A diferença entre a saída
history -D
e o conteúdo de$HISTFILE
se deve ao fato de o primeiro mostrar os eventos do histórico na memória e o último conter os eventos do histórico gravados no arquivo de histórico. O que é gravado no arquivo de histórico (e quando) depende de várias opções do shell, que, neste ponto (após a exposição acima), são esperançosamente evidentes.