¿Cómo recorrer la búsqueda inversa en BASH?

444

En la terminal, puedo escribir CTRL-Rpara buscar un comando coincidente previamente escrito en BASH. Por ejemplo, si escribo, CTRL-Rentonces grepaparece mi último grepcomando, y puedo presionar enter para usarlo. Sin embargo, esto solo da una sugerencia. ¿Hay alguna forma de recorrer otros comandos de coincidencia previamente escritos?

Pueblo
fuente

Respuestas:

598

Si entiendo la pregunta correctamente, debería poder recorrer las alternativas presionando repetidamente Ctrl+R.

P.ej:

Ctrl+R grep Ctrl+R Ctrl+R ...

Que busca hacia atrás a través de su historial. Para buscar hacia adelante en su lugar, use Ctrl+S, pero es posible que deba haber configurado: stty -ixon(ya sea .bash_profilemanualmente o de forma manual) antes de eso para deshabilitar la función XON / XOFF que se hace cargo Ctrl+s. (Más detalles aquí .)

Runium
fuente
23
+1 - FYI - también puedes buscar hacia adelante según esta respuesta de StackOverflow .
Jordan Arseno
77
Y use Ctrl + Shift + r para el desplazamiento inverso si pasa por alto.
wiswit 01 de
19
@wiswit CTRL+SHIFT+rno funciona para mí.
Maxim Suslov
99
@MaximSuslov Vea esta pregunta: stackoverflow.com/questions/791765/… Puede agregar [[ $- == *i* ]] && stty -ixona su .bashrc y luego CTRL+sfuncionará como el reverso deCTRL+r
gla3dr
99
@JordanArseno Tomé "buscar hacia adelante" para significar "buscar comandos que aún no he escrito"
Josh Johnson
234

Si cree que el comando se usará con frecuencia, puede agregar una etiqueta

comando #util

Entonces

ctrl+r #useful

Esto funciona porque #es un delimitador de comentarios, es decir, todo lo que viene después del símbolo no se interpreta como un comando. Sin embargo, se registrará en el historial y, por lo tanto, se puede buscar.

Sathyam
fuente
55
Por lo general, me gusta este tipo de etiquetado. #trg_bld #open_log
Makesh
1
¿Dónde agregar esta etiqueta?
Sudip Bhandari
55
@SudipBhandari justo después de su comando. # comienza un comentario. Ej. Ls -lah #useful
Andrei
Unix tenía hashtags antes de que fuera genial :)))
Bobby Marinoff hace
47

También puede configurar las flechas hacia arriba y hacia abajo para hacer una búsqueda ligeramente diferente agregando estas líneas a ~ / .inputrc:

"\e[A": history-search-backward
"\e[B": history-search-forward

En lugar de buscar una subcadena en cualquier parte del comando (como Ctrl-r ), buscará un comando que comience con el texto a la izquierda del cursor . Por ejemplo, si ejecuto estos comandos:

$ ls bart
$ ls fools

luego escriba lsy presione Updos veces, se mostrará ls barty el cursor en el mismo lugar. Compare con Ctrl- r, donde encontraría el lsdoble en la última línea, por lo que tendría que presionarlo una vez más para encontrar la línea anterior.

Estos enfoques tienen sus puntos fuertes, y ambos pueden ahorrar mucho tiempo.

l0b0
fuente
2
Esto también es estándar en OS X, por lo que no necesita crear ~/.inputrcy agregar esas dos líneas.
DASKAjA
1
Como falconepi ha escrito en los comentarios de esta respuesta , en Ubuntu solo necesita comentar en ~/.inputrclas dos líneas, incluida la búsqueda de historial- *
Arpad Horvath
También puede consultar esta publicación para obtener más detalles sobre esta respuesta: codeinthehole.com/writing/…
Andrei
Esto no era estándar en mi macOS (10.13). ¡Siempre he echado de menos esta funcionalidad!
outrin
Lo bueno de esto es que todavía puede usar ctrl-p / ctrl-n para el
deslizamiento
0

Hay un reemplazo para el incorporado Ctrl + Rllamado hstr . Permite buscar el historial de comandos que coincida con todos los tokens de búsqueda al mismo tiempo (entre otras cosas), y recorrer los resultados con las teclas de flecha:

Ejemplo

Aquí hay un screencast de demostración .

Se puede instalar en un sistema operativo de la familia Debian como:

add-apt-repository ppa:ultradvorka/ppa
apt-get update
apt-get install hstr

hstr --show-configuration >> ~/.bashrc

Y luego usar Ctrl + R(después de volver a abrir la terminal).

saaj
fuente