マングルされた歴史


15

GUIモードで、ユーザーが複数の端末を開いている場合、端末はそのユーザーの履歴ファイルをどのように書き換えますか?私が尋ねる理由は、各端末でユーザーが異なるコマンドを実行する可能性があるためです。それで、履歴ファイルはすべての端末からのコマンドを保存するのですか、それとも最初に開かれる端末からのコマンドのみを保存するのですか?または、この状況に取り組むために採用されている他の種類のスキームがありますか?

回答:


11

シェルがそれをどのように選択するかに完全に依存します

bashデフォルトでは、終了時に各シェルのローカル履歴で履歴ファイルを上書きするため、終了する最後のシェルが優先されます。このhistappendオプションにより、代わりにマスター履歴に追加されます(shopt -s histappend)。

zsh デフォルトで同じことを行い、それに対処するためのいくつかのオプションがあります:

  • appendhistory -シェルが終了すると、各シェルの履歴がマスター履歴ファイルに追加されます
  • incappendhistory -シェルが終了するまで待つのではなく、シェルで行が実行されるたびにマスター履歴ファイルが更新されます
  • sharehistory-に似てincappendhistoryいますが、マスター履歴ファイルから実行中のすべてのシェルに変更をプルするため、あるシェルでコマンドを実行Upしてから別のシェルでヒットして表示できます

今バッシュしてくださいにそれを行う方法を教えて;)
tante

1
@tante動作しshopt -s histappendませんか?
マイケルMrozek

0

私はもともとこのアイデアをO'Reillyの「Unix Power Tools」の本から得ました。

私には.profile私のセット:

export HISTFILE=$HOME/.sh_hist.$$

.profileが読まれるたびに、セッションのPIDという名前の新しい履歴ファイルを取得します。複数のログインがある場合、各ログインは一意の履歴ファイルを取得します。Worksでkshbash

Xセッションで新しいターミナルを開いているだけの場合、それらは通常ログインシェルではありませんが、ログインシェルとして動作するように構成できます。たとえば、ログインシェルとしてrxvt +ls起動rxvtします。使用している端末のドキュメントを確認してください。

また、.logoutor .bash_logoutファイル(またはその他の手段)を使用してクリーンアップしない限り、最終的に.sh_histファイルが大量に発生します。


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