なぜ誰もがbashに「histappend」を設定しないのですか?


36

これが何をshopt -s histappend 意味するのかを見つけた後、それは非常に健全な設定のようであり、デフォルトではないことに驚いています。なぜ各シェルの終了時に履歴を消去したいのですか?


このオプションの誤解は別として-@maxscchlepzigで修正-"default"には少なくとも2つのソースがあります:bash'pure'またはdistro-supplied .bashrcです。前者については、おそらく@Gillesが正しいでしょう。後者の意味で-s histappend 、たとえばDebianの2008年以降のデフォルトです:bugs.debian.org/cgi-bin/bugreport.cgi?bug
underscore_d

3
まあ、Unixは健全なデフォルトで正確に有名ではありませんか?私は、デフォルトでは、最も非友好的なデフォルトを期待するようになってきました:P(マイナーは誇張)
olejorgenb

回答:


34

histappendが設定されていない場合、これは、各シェル出口で履歴が消去されることを意味しません。histappendbashを使用しないと、起動時にhistfileがメモリに読み込まれます-操作中に新しいエントリが追加され、シェルの終了時に、最後のHISTSIZE行が追加されずに履歴ファイルに書き込まれます。

たとえば、histfileに400個のエントリが含まれている場合、bashランタイム中に10個の新しいエントリが追加されます-histsizeが500に設定されると、新しいhistfileには410個のエントリが含まれます。

この動作は、より多くのbashインスタンスを並行して使用する場合にのみ問題になります。その場合、履歴ファイルには最後に終了したシェルの内容のみが含まれます。

これとは無関係:プライバシー上の理由から、シェル終了時に履歴を消去したい人がいます。


また、セキュリティ上の理由から、rootユーザーの履歴を保存しないことをお勧めします。この機能により、rootはディスクに保存されることなくシェル履歴を保持できます。
メイ

1
「シェルの出口ごとに履歴が消去されるわけではありません」の場合は+1。これは他の場所で完全に十分に説明されています-しかし、おそらくオプションの名前の文脈では、一部の読者に届くほど簡潔ではないかもしれません(OK、しばらくの間読者の一人だったかもしれません)。@Meiのいずれかの順列は、の履歴がディスクに到達するhistappendかどうかにどのように関連しrootますか?繰り返しますが、それは書かれたものにのみ影響し、ifには影響しません。
underscore_d

5
誰も2つ未満のbashインスタンスを実行していますか?histappendだけでなくHISTCONTROL=ignoredups:erasedups:ignorespace、ほとんどの人にとって良いデフォルトのようです。
-dashesy

histappend、私が持っている場合は、有効無意味HISTFILESIZE=HISTSIZE=無限の歴史のために?
Marc.2377

1
@dashesy私は個人的に、重複したエントリを無視/消去したくない。HISTTIMEFORMATを有効にしており、戻ってコマンドを発行したタイミングを確認できるようにしています...複数回発行した場合は、各コマンドがいつ発行されたかを知りたいです。それは個人的な好みであり、自分の好みです。;)
msb

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.