Как получить последние N команд из истории?

37

Я хочу посмотреть, какие последние N команд в моем history. Я думал, history | tail -n 5что это будет сделано, но я заметил, что многострочная команда рассчитывает столько же строк, сколько она имеет.

$ echo "hello
how are you"
$ history | tail -2
how are you"
1051  history | tail -2

Поэтому мой вопрос: нужно ли анализировать выходные данные команды, чтобы выполнить это?

fedorqui
источник
1
// Вот почему я люблю stackexchange
Натан Басанезе

Ответы:

46

Я нашел это!

история [n]

Аргумент n содержит только последние n строк.

$ echo "hello
how are you"
$ history 2
1060  echo "hello
how are you"
1061  history 2
fedorqui
источник
4
Это, кажется, для tcsh, yashи bash. Вы можете дать соответствующую информацию для других оболочек нравятся zsh, fish, kshи путь POSIX.
Стефан Шазелас
1
Я бы с удовольствием, хотя на моем компьютере ничего из этого не установлено. Вы рекомендуете какой-либо конкретный источник для получения информации? В opengroup я вижу ссылку на pubs.opengroup.org/onlinepubs/9699919799
fedorqui
6
fc -l -2тоже работает (но не добавляет тока fc -l -2к выходу)
Евгений Верещагин
fcкстати показывает последние n команд с -n. Показывать from n commands until lastтолько n(что не имеет особого смысла, потому что вам нужно знать общее количество). На немецком мы бы сказали ein kleiner aber feiner unterschied: маленький, но восхитительный diff. Не забудьте использовать, -lкак указывал @EvgenyVereshchagin, потому что в противном случае вы окажетесь в редакторе, а это не то, что вам нужно.
Тимо
0

Протестировано в OpenBSD 6.3 (PD KSH v5.2.14 99/07 / 13.2).

history [b]

Показывает всю историю, начиная с записи с номером [b]

history [b] [e]

Показывает интервал истории от [b] до [e]

CrimsonPermanentAssurer
источник
0

Вы также можете использовать отрицательные числа, такие как:

history -1

Или используйте диапазон (последние 10):

history -1 -11 
robertrv
источник
У меня не работает с bash 5.0.11.
Джоелостблом
0

Когда вы применяете историю, она также покажет последнюю команду истории. Для предотвращения этой потери пространства может пригодиться такой псевдоним:

alias hs=' history 16 | head -n 15'

(сама команда history 16 | head -n 15)

Еще один полезный псевдоним истории:

  alias hsg=' history | grep ' 

(когда ctr + R слишком мал, чтобы выбрать из)

Пробел перед _history будет выполнять команду, не записанную в истории

fc -l # также перечислит 16 последних команд (и больше)

Алексей К.
источник
2
Хотя это и правда, но ни один из них не решает данный вопрос.
Джефф Шаллер