¿Cómo obtener los últimos N comandos del historial?

37

Quiero ver cuáles son los últimos N comandos en mi history. Pensé que lo history | tail -n 5lograría, pero noté que un comando multilínea cuenta para tantas líneas como tiene.

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

Entonces mi pregunta es: ¿tengo que analizar la salida del comando para lograr esto?

fedorqui
fuente
1
//, esta es la razón por la que me encanta stackexchange
Nathan Basanese

Respuestas:

46

¡Lo encontré!

historia [n]

Un argumento de n enumera solo las últimas n líneas.

$ echo "hello
how are you"
$ history 2
1060  echo "hello
how are you"
1061  history 2
fedorqui
fuente
44
Eso parece ser para tcsh, yashy bash. Es posible que desee dar a la información correspondiente para otras cáscaras como zsh, fish, ksh, y la forma POSIX.
Stéphane Chazelas
1
Me encantaría, aunque no tengo ninguno de estos instalados en mi computadora. ¿Recomienda alguna fuente específica para obtener la información? En opengroup veo una referencia a pubs.opengroup.org/onlinepubs/9699919799
fedorqui
66
fc -l -2también funciona (pero no agrega corriente fc -l -2a la salida)
Evgeny Vereshchagin
fcpor cierto muestra los últimos n comandos con -n. Mostrar from n commands until lastes solo n(lo que no tiene mucho sentido porque necesita saber el número total). En alemán diríamos ein kleiner aber feiner unterschied: un pequeño pero encantador deleite. No te olvides de usar -lcomo @EvgenyVereshchagin ya señaló porque de lo contrario terminas en un editor que no es lo que quieres.
Timo
0

Probado en OpenBSD 6.3 (PD KSH v5.2.14 99/07 / 13.2).

history [b]

Muestra todo el historial que comienza desde una entrada con un número [b]

history [b] [e]

Muestra el intervalo del historial de [b] a [e]

CrimsonPermanentAssurer
fuente
0

También podría usar números negativos, como:

history -1

O use un rango (últimos 10):

history -1 -11 
robertrv
fuente
No me funciona con bash 5.0.11.
joelostblom
0

Cuando aplique el historial, también mostrará el último comando del historial. Para evitar ese desperdicio de espacio, tal alias podría ser útil:

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

(el comando en sí history 16 | head -n 15)

Otro alias de historia útil:

  alias hsg=' history | grep ' 

(cuando ctr + R es demasiado pequeño para elegir)

El espacio delante de _history ejecutará un comando no escrito en la historia

fc -l # también enumerará 16 últimos comandos (y más)

Alexey K.
fuente
2
Si bien es cierto, nada de esto aborda la cuestión en cuestión.
Jeff Schaller