it-swarm-es.tech

La mejor manera de buscar en la historia de Shell

¿Hay una mejor manera de buscar un comando en mi archivo de historial que grep? Tengo alguna idea de cómo comienza el comando, pero no sé qué tan atrás en la historia está.

pdate: anteriormente era específico de zsh, pero debido a las respuestas superpuestas, no dude en responder para cualquier Shell (o modo (vi/emacs)) aquí, solo tenga en cuenta si es específico.

82
xenoterracide

Ctrl+R suele ser la mejor manera, como dijo el descriptor . También puedes usar !string, que ejecuta el comando más reciente que comienza con string, o !?string?, que ejecuta el comando más reciente que contiene string.

(Creo que eso es lo único relevante para esta pregunta, pero cubrí mucho más de los comandos del historial en esta respuesta )

78
Michael Mrozek

Cuando use Bash, escriba Control-R y luego comienza a escribir. Mecanografía Control-R repetidamente después de ingresar algo de texto lo moverá hacia atrás en líneas de comando coincidentes.

32
grendel

No estoy seguro de si esto ayudará, pero me gusta usar ctrl-r y luego comienza a escribir el comando. Debe revisar tu historia y presentarte el primer partido. Para alternar entre los partidos solo presiona ctrl-r de nuevo.

18
decriptor

Si agrega lo siguiente a ~/.inputrc

"\e[5~": history-search-backward
"\e[6~": history-search-forward

y reinicie Bash, puede comenzar a escribir y luego usar Page Up y Page Down para avanzar y retroceder por el historial de líneas que comienzan con el mismo prefijo que acaba de escribir.

(Algunos pueden preferir usar \e[A y \e[B, que reemplazará a la normal Up y Down acciones en lugar de vincular nuevas claves).

17
ephemient

El mensaje interactivo invocado por Ctrl-R, que ya se había mencionado, es la forma más conveniente. Además, es popular reasignar Up y Down teclas de flecha para buscar en el historial un prefijo actualmente en la línea de comando, sin embargo, esto requiere algunos cambios en ~/.inputrc archivo .

La solución clásica y menos interactiva es utilizar la expansión del historial de Shell. Mecanografía

!foo

ejecutará el último comando que comienza con foo y

!?foo

ejecutará el último comando que contiene foo. Puede encontrar más información sobre la expansión del historial en Manual de referencia de Bash , suponiendo que su Shell sea Bash o compatible.

9
Adam Byrtek

Si agrega stty -ixon para usted ~/.bashrc archivo entonces Ctrl-s irá en la dirección opuesta a Ctrl-r.

Si escribe !ls luego bash revisará tu historial y ejecutará el comando más reciente que comienza con "ls"

3
Kevin M

podría ser específico de zsh. Al investigar esta respuesta I encontradovi-history-search-backward que permite buscar con / en modo vi (que no mencioné en el que estaba) puedes usar n y N para buscar hacia adelante y hacia atrás respectivamente (después de presionar enter).

2
xenoterracide

Me sorprende que esto no se haya mencionado, pero puede seleccionar el modo vi en bash o ksh haciendo esto:

set -o vi

... o usando esto como el contenido de ~/.inputrc (para GNU readline utilizada en programas como bash):

set editing-mode vi

Luego, después de eso, puedes usar Esc para entrar modo comando y usar k volver a la historia y j para seguir adelante. También puedes buscar usando / buscar normalmente, y ? para buscar en reversa.

Si utiliza ~/.inputrc, entonces esto funcionará no solo en GNU bash sino en cualquier cosa que use GNU readline como CLISP y posiblemente programas como el comando MySQL Shell y similares) la cáscara de CPAN.

2
Mei

Para avanzar cuando se usa la búsqueda inversa (con el comando Ctrl-R):

  1. Abra su archivo .bashrc:
    Sudo gedit ~/.bashrc

  2. agregue esta línea (la letra "f" puede reemplazarse por otra que el sistema aún no haya utilizado)

    bind '"\C-f": forward-search-history' 
    
  3. Cierre su archivo y actualice su .bashrc (o abra otra terminal) con el comando:
    source ~/.bashrc o . ~/.bashrc

AHORA PUEDE AVANZAR EN LA HISTORIA CON EL ACCESO CORTO: Ctrl + f

Trabajando en Ubuntu 18.04 LTS

2
Franklin TCHATATH

Yo uso siguientes dos la mayor parte del tiempo.
Pero tenga en cuenta que ambos buscan caracteres iniciales.

  1. tcsh: escriba algunos caracteres del comando y luego Esc+p mostrará el comando anterior que comienza con esa secuencia de teclas, presiónelo nuevamente y mostrará otro comando.
  2. ksh: use fc -e - <SPACE><first few char for your previous > esto ejecutará el último comando que coincida con esa secuencia.

No pude encontrar algo como Ctrl+R en Bash para mi ksh y tcsh.

1
Hemant

Hay una manera de usar Ctrl-R con tcsh. Agregue lo siguiente en su ~/.cshrc:

bindkey "^r" i-search-back (es solo un signo de intercalación y la letra r)

Ese es el mayor ahorro de tiempo para mí.

1
Alain

respuesta similar a @ephemient, pero puede poner en su .bashrc

bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-foward'

y escriba parte de la frase, y luego use la flecha arriba/abajo para explorar las opciones más recientes que coinciden. Este es el comportamiento predeterminado de matlab.

Para la mayoría de las personas, si desea portar su configuración a un nuevo sistema, es más fácil recordar enganchar solo su ~/.bashrc entonces que tienes que enganchar eso ~/.inputrc

1
Matt S.

Sí, existe, al menos si está utilizando zsh. Simplemente comience a escribir el comando y luego presione M-p (ESCp) y encontrará comandos anteriores que coincidan con lo que escribió. Presiónelo nuevamente para encontrar la próxima coincidencia.

0
dkagedal