BashのPROMPT_COMMAND内で、ユーザーがコマンドを入力せずに「return」を押したかどうかを知る方法はありますか?
ベストアンサー1
履歴番号が増加していることを確認してください。キャンセルされたプロンプトまたはユーザーが押したばかりのプロンプトは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'
履歴に重複圧縮が設定されている場合(HISTCONTROL=ignoredups
またはHISTCONTROL=erasedups
)、2つの同じコマンドが連続して実行された後、空のコマンドが誤って報告されます。