Для 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 v4.
встановіть set -o historyShe -bang як інтерактивний і не забувайте про те, як згадував Чепнер.
#!/bin/bash -i
set -o history
PS. history |tail -n2 |head -n1не дорівнює останній команді. це команда перед останньою.
Зверніть увагу, якщо останні чи попередні команди були багаторядковими, це не поверне правильний результат.
btw в консолі ви можете використовувати !-2для позначення команди prelast замість вашої дивної конструкції. на жаль, здається, він не працює в оболонці навіть у інтерактивному режимі.