¿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?

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í .)


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.


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.


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).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.