Acabei de perceber que history
não produz nada em um subshell. Vou tentar mostrar contando linhas - primeiro uma verificação de sanidade com echo:
$ echo a | wc -l
1
... e em um subshell:
bash -c 'echo a' | wc -l
1
De fato, esperamos uma saída de linha em ambos os casos. Agora, para history
:
$ history | wc -l
681
... mas em um subshell:
$ bash -c 'history' | wc -l
0
... history
não retorna nenhuma linha.
Por que isso acontece - e como posso obter history
o subshell para gerar o histórico do shell atual (incluindo os comandos da última sessão)?
-c
não cria um subshell ; ele apenas cria um novo shell não interativo (ou melhor, um ambiente de execução não interativo em um processo separado que não tem nada a ver com seu shell atual). E: em shells não interativos, ohistory
comando é intencionalmente não funcional:Comando de histórico dentro do script bash