.png)
Я читал, что 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
, но вам понадобится какой-то тест, чтобы предотвратить цикл выполнения.