Finalización de la línea de comandos desde el historial de comandos

85

Entonces, miré la historia y el Ctrl+ R, pero no son lo que pensé que sabía. ¿Hay alguna forma en que pueda escribir al comienzo de un comando y recorrer las coincidencias en mi historial con algún atajo bash?

# mysq(some shortcut key)

Me da

# mysqldump  --add-drop-table -e -q -n -C -u 
(some shortcut key)
#  mysql -u ben.dauphinee -p
Ben Dauphinee
fuente
Nota al margen: hay '<kbd> Alt + Tab </kbd>' para tty's sin escritorio.
neverMind9

Respuestas:

91

Al presionar Ctrl+ Rse abrirá la búsqueda del historial inverso. Ahora comience a escribir su comando, esto le dará la primera coincidencia. Al presionar Ctrl+ Rnuevamente (y nuevamente) puede recorrer el historial.

mysq(Ctrl+R)

Daría:

mysqldump  --add-drop-table -e -q -n -C -u 

Ctrl+ Rotra vez:

mysql -u ben.dauphinee -p
meneo
fuente
55
Gracias. Además, Esc pondrá el comando seleccionado en su línea de comando sin ejecutarlo, mientras que Enter ejecutará el comando seleccionado.
Ben Dauphinee
3
Encuentro CTRL + E mejor para esto que ESC, porque escapar es difícil de alcanzar pero ya estoy presionando CTRL + R, por lo que E está ahí. Esto también coloca el cursor al final de la línea, lo cual es útil en caso de que quiera cambiar algo (como un nombre de archivo) que considero un caso común.
Sorpigal
Lamentablemente, no funciona en Cygwin
ATorras
2
En mac, al menos, parece mysq(CTRL+R)(CTRL+R)que no pasa por los comandos que comienzan con "mysq". Tienes que hacer en su (CTRL+R)mysq(CTRL+R)lugar
BlueRaja - Danny Pflughoeft
62

Para ampliar lo que dijo Gilles, tengo lo siguiente en mi .inputrcpara vincular la tecla de flecha arriba / abajo history-search-backwardy history-search-forward:

# Key bindings, up/down arrow searches through history
"\e[A": history-search-backward
"\e[B": history-search-forward
"\eOA": history-search-backward
"\eOB": history-search-forward

Simplemente escriba algo (opcional), luego presione la tecla de flecha arriba / abajo para buscar en el historial los comandos que comienzan con lo que escribió.

Para hacer esto en .bashrclugar de .inputrc, puedes usar:

bind '"\e[A": history-search-backward'
raychi
fuente
3
esos enlaces pertenecen a ~ / .inputrc ... gracias por apoyar mi pereza.
Martin Zeitler
Vale la pena señalar que el '\ e' es crucial, al menos para los debutantes de bash. Simplemente escribir Ctrl-V para obtener la combinación de teclas para su comando no cuenta toda la historia. Por ejemplo, si escribe Ctrl-V Meta-P (es decir, Alt-P), se obtiene ^ [p - para obtener el comportamiento que desea, reemplace "^ [" con '\ e'.
MrMas
De acuerdo con @syslogic: coloque las líneas en .inputrc y suelte el enlace y las comillas simples.
MrMas
copiando esto en .inputrc en osx, obtengo: source ~ / .inputrc -bash: \ e [A :: comando no encontrado -bash: \ e [B :: comando no encontrado -bash: \ eOA :: comando no encontrado -bash: \ eOB :: comando no encontrado
Walrus the Cat
1
Consulte superuser.com/questions/241187/how-do-i-reload-inputrc . No puedes obtener el archivo.
raychi
7

También puede presionar el PAGEUPbotón para completar automáticamente un comando. Básicamente busca el bash_historyarchivo.

0aslam0
fuente
Debe descomentar dos líneas /etc/inputrco agregar estas dos líneas a su $HOME/.inputrcarchivo: "\e[5~": history-search-backward "\e[6~": history-search-forward
garlix
5

Puede usar los comandos de línea de lectura history-search-backwardy history-search-forwardnavegar entre las líneas de comandos que comienzan con el prefijo que ya ha escrito. Ninguno de estos comandos está vinculado a las teclas en la configuración predeterminada.

Zsh (zle) tiene comandos similares history-beginning-search-backwardy history-beginning-search-forward, por defecto, no está vinculado a teclas. También hay history-search-backwardy history-search-forward, que utiliza la primera palabra del comando actual como prefijo para buscar independientemente de la posición del cursor.

Gilles
fuente
4

Si desea una buena visión general de comandos muy similares, puede obtener una lista con:

history|grep KEYSTRING

Luego copie y pegue con el botón central de su mouse.

Rgds - Joe

joe_zeroh
fuente