在每個命令後開啟 ksh 中的刷新歷史記錄(或停止刷新)

在每個命令後開啟 ksh 中的刷新歷史記錄(或停止刷新)

我讀到,與 bash 相反,ksh 在每個命令後都會刷新其歷史記錄。這對很多人來說可能是件好事,但對我來說,這讓我發瘋!

我打開了幾個為自己的任務打開的窗口,並且共享的歷史記錄與命令的特定會話歷史記錄混淆了。

有沒有辦法可以停用此刷新,以便僅在登出時將歷史記錄附加到命令歷史記錄中?

或者,也許有一種方法可以請求歷史記錄而不是每次都刷新命令列歷史記錄?

答案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,但您需要某種測試來防止執行循環。

相關內容