Для bash v4+:
Используйте интерактивный режим в оболочке.
Установить She-Bang как
#!/bin/bash -i
и history
внутри вашего сценария будет работать.
$ cat test.sh
#!/bin/bash
history | wc -l
$ ./test.sh
0
$ sed -i '1s/bash/bash -i/' test.sh
$ ./test.sh
6495
Команды, выполненные внутри скрипта, не записываются в историю.
Для bash v3 (и возможно для более старых)
Способ выше не работает для этой версии bash. Тем не менее, вы можете удалить ее, и история будет работать хорошо. Этот способ также прекрасно работает для Bash v4.
установите she-bang как интерактивную и не забывайте об set -o history
как упоминал Чепнер.
#!/bin/bash -i
set -o history
PS. history |tail -n2 |head -n1
не равна последней команде. это команда перед последней.
Обратите внимание, что если последние или предварительные команды были многострочными, они не вернут правильный результат.
Кстати, в консоли вы можете использовать !-2
для обозначения команды prelast вместо вашей странной конструкции. к сожалению, он не работает в сценарии оболочки даже в интерактивном режиме.