我读到,与 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
,但您需要某种测试来防止执行循环。