Verifique se o número do histórico foi incrementado. Um aviso cancelado ou um prompt no qual o usuário pressionou Enter não aumentará o número do histórico.
O número do histórico está disponível na variável HISTCMD
, mas isso não está disponível em PROMPT_COMMAND
(porque o que você quer é o número do histórico do comando anterior; o comando que executa PROMPT_COMMAND
tem nenhum número de histórico). Você pode obter o número da saída de fc
.
prompt_command () {
HISTCMD_previous=$(fc -l -1); HISTCMD_previous=${HISTCMD_previous%%$'[\t ]'*}
if [[ -z $HISTCMD_before_last ]]; then
# initial prompt
elif [[ $HISTCMD_before_last = "$HISTCMD_previous" ]]; then
# cancelled prompt
else
# a command was run
fi
HISTCMD_before_last=$HISTCMD_previous
}
PROMPT_COMMAND='prompt_command'
Observe que, se você tiver ativado a compactação de duplicatas no histórico ( HISTCONTROL=ignoredups
ou HISTCONTROL=erasedups
), isso informará erroneamente um comando vazio depois de executar dois comandos idênticos sucessivamente.