web-dev-qa-db-ja.com

同じユーザーの異なるセッションに別々のコマンド履歴を設定するにはどうすればよいですか?

一部のUnixサーバーでこの問題に直面しています。同じユーザーに対して異なるセッションを開くと、コマンド履歴はすべてのセッションで共有されます。誤ってCtrl-Pまたはup arrowを押して、Enterキーを押すと、問題が発生します。ある時、私はrm -rf *を実行することになります。ありがたいことに、ファイルを削除する権限がないディレクトリにいました。

同じユーザーの異なるセッションに別々のコマンド履歴を設定するにはどうすればよいですか?ほとんどの場合、私はkshシェルとtcshシェルを使用しています。

8
Hemant

ksh faq から:

Q1。シェル用に個別の履歴ファイルを取得するにはどうすればよいですか?

A1。 kshは、同じ履歴ファイル名を使用するすべてのシェルに共有履歴ファイルを使用します。これは、あるウィンドウに入力されたコマンドが他のウィンドウのシェルに表示されることを意味します。個別のウィンドウを取得するには、最初の履歴コマンドを作成する前に、HISTFILE変数を別の名前に設定する必要があります。

8
theotherreceive

HISTFILE=~/.hist$$.profileに追加できます。これにより、セッションごとに一意のファイルが生成されます。

.hist*が大量に発生するため、時々削除することをお勧めします。

11
Gert

私はあなたが同時セッションについて話していると仮定しています。次々と続くセッションを分離することはあまり役に立ちません。すべてのセッションが一意になるため、その履歴を使用できなくなります。その場合は、コマンド履歴を無効にする方がよいでしょう。

同時セッションの分離について話している場合は、Bashを使用することをお勧めします。 2つの同時セッションが混在したコマンド履歴を取得していないことは間違いありません。 Bashはログアウト時に.bash_historyにのみ履歴を書き込むため、コマンド履歴はログアウト後まで混合されません。 Bashの使用が許容できる場合、それで問題は解決しますか?

2
wzzrd

ゲルトの答えに何かを追加します。

Gert's

HISTFILE =〜/ .hist $$を.profileに追加できます。これにより、セッションごとに一意のファイルが生成されます。

鉱山

以下を追加することで、これらのファイルを自動的に削除できます。

trap 'rm ${HISTFILE}' exit

1
Robert Jacobs