各コマンドの後にkshの履歴をフラッシュする(または更新を停止する)

各コマンドの後にkshの履歴をフラッシュする(または更新を停止する)

ksh は bash とは対照的に、各コマンドの後に履歴をフラッシュすると読んだことがあります。これは多くの人にとって良いことかもしれませんが、私にとっては気が狂いそうです。

独自のタスク用に開かれた複数のウィンドウがあり、この履歴が共有されると、コマンドの特定のセッション履歴が台無しになります。

このフラッシュを無効にして、ログアウト時にのみ履歴をコマンド履歴に追加できるようにする方法はありますか?

または、コマンドライン履歴を毎回更新しないように履歴を要求する方法があるでしょうか?

答え1

以前は、 で複数のシェルを実行していましたscreen。.khsrc では、$PS1 や $HISTFILE (および tty デバイスのベース名を含む) などのいくつかの設定をカスタマイズしていました。

これは比較的簡単に再構築できました:

tty=$(basename $(tty))
histdir=~/.hist
mkdir -p $histdir
export HISTFILE=$histdir/history.$tty
export PS1=$USER@'$PWD ['$tty'] ${?#0}$ '
exec /usr/bin/ksh

これを として保存し~/bin/screenshell、 を実行しますchmod +x ~/bin/screenshell。これで、 を実行してscreen、ウィンドウごとに個別の履歴ファイルを持つことができます。

SHELL=~/bin/screenshell screen

例:

ウィンドウ 3

    vagrant@/home/vagrant [3] 127$ history
    1       history
    2       error
    3       history

ウィンドウ4

    vagrant@/home/vagrant [4] $ history
    1       history
    vagrant@/home/vagrant [4] $ echo $HISTFILE
    /home/vagrant/.hist/history.4
    vagrant@/home/vagrant [4] $ tty
    /dev/pts/4

exec ksh別の方法としては から実行することです.kshrcが、exec ループを防ぐために何らかのテストが必要になります。

関連情報