bash でコピペで張り付けたコマンドが履歴に残らない

2025/02/15に公開

bash でコピペで張り付けたコマンドが履歴に残らない

Bashでコピペしたコマンドが履歴に残らないようにするには、HISTCONTROL 環境変数の設定を調整する必要があります。

原因

HISTCONTROLignorespaceignoreboth が設定されている場合、先頭にスペースをつけて実行したコマンドは履歴に記録されません。
コピペの際に無意識にスペースが入っていると履歴に残らないことがあります。

対処法1: HISTCONTROL の設定を確認する

現在の設定を確認:

echo $HISTCONTROL

もし ignorespace または ignoreboth となっていたら、これが原因です。

対処法2: HISTCONTROL を変更する

スペース付きコマンドも履歴に残す:

export HISTCONTROL=ignoredups
  • ignoredups: 重複するコマンドは履歴に残さないが、スペース付きコマンドは履歴に記録する。

恒久的な対処

.bashrc に以下を追記する:

echo 'export HISTCONTROL=ignoredups' >> ~/.bashrc
source ~/.bashrc

その他の考えられる原因

  • 端末エミュレータの問題: 一部のターミナルはペースト時に制御文字を挿入することがある。
  • Bashの設定: HISTSIZEHISTFILESIZEが小さすぎると、履歴に即座に反映されず消えることがある。
  • 即時履歴保存が無効:
    コマンド実行直後に履歴を即座に保存するには .bashrc に以下を追加:
    export PROMPT_COMMAND='history -a'
    

確認方法

設定後、実際にコピペでコマンドを貼り付けて、履歴を確認:

history | tail -20

これで、コピペしたコマンドが履歴に記録されるはずです。 😊

Discussion