Para o bash v4 +:
Use o modo interativo no shell.
Defina a she-bang como
#!/bin/bash -i
e history
dentro do seu script funcionarão.
$ cat test.sh
#!/bin/bash
history | wc -l
$ ./test.sh
0
$ sed -i '1s/bash/bash -i/' test.sh
$ ./test.sh
6495
Comandos executados dentro do script não são registrados no histórico.
Para o bash v3 (e possível para os mais antigos)
-
O caminho acima não funciona para este vesions de bash. No entanto, você pode remover a she-bang e a história funcionará bem. Desta forma também funciona muito bem para o bash v4.
-
defina she-bang como interativa e não se esqueça de
set -o history
como chepner mencionado.
#!/bin/bash -i
set -o history
PS. history |tail -n2 |head -n1
não é igual ao último comando. é o comando antes do último.
Note que se os comandos last ou prelast forem multilinhas, não retornará o resultado correto.
btw no console, você pode usar !-2
para se referir ao comando prelast em vez de sua construção estranha. infelizmente parece que não funciona em shell script, mesmo no modo interativo.