Convierta el historial de vaciado en ksh después de cada comando (o deje de actualizarlo)

Convierta el historial de vaciado en ksh después de cada comando (o deje de actualizarlo)

He leído que ksh, a diferencia de bash, vacía su historial después de cada comando. Esto puede ser bueno para muchos, pero a mí me vuelve loco.

Tengo varias ventanas abiertas que se abren para sus propias tareas, y este historial compartido confunde el historial de comandos de sesiones específicas.

¿Hay alguna manera de desactivar este vaciado, de modo que el historial pueda agregarse al historial de comandos solo en el momento de cerrar sesión?

¿O tal vez hay una manera de solicitar que el historial no actualice el historial de la línea de comandos cada vez?

Respuesta1

Solía ​​tener varios shells ejecutándose en screen. En mi .khsrc personalizaría varias configuraciones, incluidas $PS1 y $HISTFILE (e incluiría el nombre base del dispositivo tty).

Esto fue relativamente fácil de reconstruir:

tty=$(basename $(tty))
histdir=~/.hist
mkdir -p $histdir
export HISTFILE=$histdir/history.$tty
export PS1=$USER@'$PWD ['$tty'] ${?#0}$ '
exec /usr/bin/ksh

Guarde esto como ~/bin/screenshelly ejecútelo chmod +x ~/bin/screenshell. Ahora puede ejecutar screeny tener archivos de historial separados para cada ventana.

SHELL=~/bin/screenshell screen

Ejemplos:

ventana 3

    vagrant@/home/vagrant [3] 127$ history
    1       history
    2       error
    3       history

ventana 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

Una alternativa sería ejecutar exec kshdesde .kshrc, pero necesitará algún tipo de prueba para evitar un bucle ejecutivo.

información relacionada