Respostas:
O history
interno bash
permite especificar nomes de arquivos quando usados com -anrw
sinalizadores e -a
descrição dos sinalizadores dos help history
estados:
anexar linhas de histórico desta sessão ao arquivo de histórico
Portanto, podemos fazer:
~$ history -a this_session.history
~$ cat ./this_session.history
history mysession.history
cat mysession.history
clear
history -a this_session.history
Para o registro, -w
(o histórico de gravação no arquivo opion) grava todo o histórico no arquivo especificado, portanto -a
(anexar) aqui é a opção preferida.
Existem outras maneiras manuais. Em particular ksh
, não possui -a
sinalizador bash
, mas o que tem ksh
e o mksh
que é é HISTFILE
variável de ambiente (e bash
possui isso também porque bash
inclui muitos ksh
recursos); a propósito, essa variável por padrão não está definida (pelo menos mksh
no Ubuntu não a definiu). Portanto, para enviar a sessão atual para outro arquivo, chamamos o HISTFILE
prefixo de comando, que na sintaxe do shell significa executar o comando com a variável de ambiente adicional especificada. Igual a:
bash-4.4$ HISTFILE='mykshfile.hist' ksh
$ echo 'Hello'
Hello
$ echo 'World'
World
$
bash-4.4$ cat ./mykshfile.hist
�echo 'Hello'
echo 'World'
O que você também pode ver é que isso ksh
e seus shells relacionados geram histórico com caracteres especiais, em vez de texto sem formatação bash
. Portanto, convém abrir esse arquivo com ksh
.
Quanto ao shell POSIX /bin/sh
no Ubuntu , que é o Debian Almquist Shell ou Dash, existe fc
embutido . No entanto, no Ubuntu traço é compilado sem lib-edit , que é uma escolha consciente pelos desenvolvedores do Ubuntu, por razões de desempenho, por isso fc
e outros modos que exigem edição de linha não funcionam fora da caixa (a menos que recompilação dash
-se e instalar lib-edit
).
Formas neutras do shell seriam gravar sua sessão com ferramentas existentes ou escrever sua própria função para gravar por comando.