
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 +ls
。rxvt
使用している端末のマニュアルを確認してください。
また、.logout
または.bash_logout
ファイル(または他の手段)を使用してクリーンアップしないと、ジャンクファイルがいっぱいになります.sh_hist
。
答え3
tcsh
:set savehist = (5000 merge)
マージ