PROMPT_COMMANDの最後のコマンドが空であることを確認する

PROMPT_COMMANDの最後のコマンドが空であることを確認する

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つの同じコマンドが連続して実行された後、空のコマンドが誤って報告されます。

おすすめ記事