Por que ksh
history -0
(o último comando que é o comando history em si) funciona, mas zsh
falha (só history -1
disponível no meu zsh). Tentei zsh -f
usar opções padrão e ainda falha.
Estou usando a versão ksh Version AJM 93u+ 2012-08-01
e o Zsh v5.9 no MacOS.
Até onde eu sei, as linhas de comando são adicionadas ao histórico no zsh depois de serem executadas, quando são histórico .
Se você tiver um caso de uso específico em que precisa de um comando para saber qual linha de comando levou à sua execução (supondo que ele foi invocado a partir de algum código inserido pelo usuário e não de alguma outra forma, como uma armadilha), você pode fazer algo como:
Ou:
Então:
preexec
é um hook invocado após uma linha de comando completa ter sido inserida logo antes de ser executada, com o código completo em$1
. Aqui, nós apenas registramos esse código em$CURRENT_COMMAND_LINE
.Em uma
DEBUG
armadilha, veja também aZSH_DEBUG_CMD
variável que contém uma representação do comando que está sendo executado (em oposição à última linha de comando inserida pelo usuário, que pode ou não ter levado à sua execução).(veja como a primeira execução da armadilha DEBUG está, na verdade, mostrando o comando executado por
preexec
, então a "linha de comando" ali é um pouco enganosa).Veja também o
zle-line-finish
widget de gancho do ZLE que é invocado quando o editor de linha sai e onde você pode encontrar a linha de comando atual$BUFFER
(e as linhas anteriores no caso de um comando multilinha onde o prompt$PS2
/$PROMPT2
foi impresso em$PREBUFFER
).Por exemplo, atualizaria o título da janela do emulador de terminal com o comprimento de cada linha inserida.