在 bash 中,从 PROMPT_COMMAND 内部,有没有办法判断用户是否只是点击了“返回”而没有输入命令?
检查历史编号是否增加。取消的提示或用户刚刚按下的提示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=ignoredups
或HISTCONTROL=erasedups
)中打开了重复压缩,这将在连续运行两个相同的命令后错误地报告一个空命令。