壊れた歴史

壊れた歴史

GUIモードでユーザーが複数の端末を開くと、端末はユーザーの履歴ファイルをどのように書き換えますか?私が尋ねる理由は、ユーザーが各端末で異なるコマンドを実行する可能性が高いからです。もしそうなら、履歴ファイルは最終的にすべての端末のコマンドを保存しますか、それとも最初に開いた端末のみを保存しますか?それとも、この状況を解決するために使用できる他の種類のソリューションがありますか?

答え1

それはすべてシェルがそれを処理することを選択する方法に依存します。

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

zsh基本的には同じことを行い、それを処理するためのいくつかのオプションがあります。

  • appendhistory- シェルが終了すると、各シェルの履歴がデフォルトの履歴ファイルに追加されます。
  • incappendhistory- シェルが終了するのを待たずに、シェルで行が実行されるたびにデフォルトの履歴ファイルを更新します。
  • sharehistory- 同様incappendhistoryですが、デフォルトの履歴ファイルの変更を実行しているすべてのシェルにインポートするので、あるシェルでコマンドを実行してから、Up別のシェルで実行して確認できます。

答え2

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

私の.profile設定では:

export HISTFILE=$HOME/.sh_hist.$$

私のコンテンツを読むたびに、.profileセッションPIDに名前を付けた新しい履歴ファイルを取得します。複数のログインがある場合は、各ログインに固有の履歴ファイルを取得します。kshとで働きますbash

Xセッションで新しい端末を開くと、通常、これらの端末はログインシェルではなく、ログインシェルとして機能するように設定できます。たとえば、ログインシェルで始まりますrxvt +lsrxvt使用している端末のマニュアルを確認してください。

また、.logoutまたは.bash_logoutファイル(または他の手段)を使用してクリーンアップしないと、ジャンクファイルがいっぱいになります.sh_hist

答え3

tcsh:set savehist = (5000 merge)マージ

関連情報