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

Связанный контент