
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 ループを防ぐために何らかのテストが必要になります。