Não, isso não é verdade.
Se $HISTFILE
for um nome de arquivo, o histórico da sessão será armazenado nesse arquivo. Isso é explicado no manual. O número de comandos lembrados no histórico do shell é limitado pelo valor de $HISTSIZE
.
Eu acredito que o histórico é liberado para o arquivo após a execução de cada comando, em oposição a bash
que libera o histórico para o arquivo quando a sessão do shell termina. Isso pode depender de qual implementação de ksh
você está usando.
Defina HISTFILE
como um nome de arquivo no seu arquivo ~/.profile
(que é lido por shells de login) ou no arquivo apontado por $ENV
(que é lido por shells interativos e tem o valor padrão de $HOME/.kshrc
em código%). ksh93
é por padrão 500 ou 512 ou algo parecido, dependendo da implementação de $HISTSIZE
que você está usando. Nenhuma dessas variáveis precisa ser exportada. O arquivo de histórico não precisa existir antes de fazer isso.
Nos comentários, você menciona que algumas teclas de edição de movimento e linha de comando do Emacs não funcionam. Isso ocorre porque o shell não está no modo de edição do Emacs. Defina a variável ksh
(ou EDITOR
) como VISUAL
ou use emacs
para ativar o modo de edição de linha de comando do Emacs. Isso também é explicado no manual. Essas variáveis também não precisam ser exportadas, a menos que você deseje que outros programas sejam usados pelo shell.
Resumo:
No seu arquivo set -o emacs
:
export ENV="$HOME/.kshrc"
No seu arquivo $HOME/.profile
:
HISTFILE="$HOME/.ksh_history"
HISTSIZE=5000
export VISUAL="emacs"
export EDITOR="$VISUAL"
set -o emacs
Isso foi testado no OpenBSD com $HOME/.kshrc
e ksh93
(que é pdksh
no OpenBSD). Eu não uso ksh
, mas como é um derivado de mksh
, acredito que isso funcionaria com essa shell também.
Observação de que pdksh
e pdksh
(e ksh93
) não podem compartilhar o arquivo de histórico porque têm formatos de histórico diferentes.
Normalmente, isso não é um problema se você separou arquivos de inicialização para bash
e bash
, por exemplo, ksh
e .bash_profile
para .bashrc
e bash
e .profile
para .kshrc
(com ksh
in export ENV="$HOME/.kshrc"
). Você pode ainda distinguir várias implementações de .profile
observando ksh
(normalmente).