判断最后一个命令在 PROMPT_COMMAND 中是否为空

use*_*ser 13 bash prompt

在 bash 中,从 PROMPT_COMMAND 内部,有没有办法判断用户是否只是点击了“返回”而没有输入命令?

Gil*_*il' 7

检查历史编号是否增加。取消的提示或用户刚刚按下的提示Enter不会增加历史编号。

历史编号在变量中可用HISTCMD,但在变量中不可用PROMPT_COMMAND(因为您想要的实际上是前一个命令的历史编号;执行PROMPT_COMMAND自身的命令没有历史编号)。您可以从 的输出中获取数字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'
Run Code Online (Sandbox Code Playgroud)

请注意,如果您在历史记录(HISTCONTROL=ignoredupsHISTCONTROL=erasedups)中打开了重复压缩,这将在连续运行两个相同的命令后错误地报告一个空命令。