¿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á.
actualización: anteriormente era específico de zsh, pero debido a la superposición de respuestas, no dude en responder para cualquier shell (o modo (vi / emacs)) aquí, solo tenga en cuenta si es específico.
shell
command-history
xenoterracida
fuente
fuente
<kbd>Ctrl+R</kbd>
. fuente de respuestaCuando use Bash, escriba Control- Ry luego comience a escribir. Escribir Control: Rrepetidamente después de ingresar algo de texto lo moverá hacia atrás en líneas de comando coincidentes.
fuente
No estoy seguro de si esto ayudará, pero me gusta usar ctrl, ry luego comenzar a escribir el comando. Debe revisar tu historia y presentarte el primer partido. Para alternar entre los partidos simplemente pulse ctrl- rde nuevo.
fuente
Si agrega lo siguiente a
~/.inputrc
y reinicie Bash, puede comenzar a escribir y luego usar Page Upy Page Downpara retroceder y avanzar a través del 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á lo normal Upy las Downacciones en lugar de vincular nuevas claves).fuente
Alt + Up
yAlt + Down
. Dependiendo de la emulación de teclado la Emular terminal utiliza estas combinaciones pueden ser mapeados o bien para\E[A
y\E[A
(por ejemplo KDE Konsole con Linux Key Bindings) o\E[1;3A
y\E[1;3B
(por ejemplo Terminal XFCE o KDE Konsole con X libre 4 Bindings).La solicitud interactiva invocada por Ctrl- R, que ya se había mencionado, es la forma más conveniente. Además, es popular reasignar Upy Downlas teclas de flecha para buscar en el historial un prefijo actualmente en la línea de comando, sin embargo, esto requiere algunos cambios en el
~/.inputrc
archivo .La solución clásica y menos interactiva es utilizar la expansión del historial de shell. Mecanografía
ejecutará el último comando que comienza con
foo
yejecutará el último comando que contiene
foo
. Puede encontrar más información sobre la expansión del historial en el manual de referencia de Bash , suponiendo que su shell sea Bash o compatible.fuente
Si agrega
stty -ixon
a su~/.bashrc
archivo entonces Ctrl- sirá en la dirección opuesta a Ctrl- r.fuente
C-s
para este propósito, pero mi terminal se congeló ; ¡tener cuidado! (Bueno, todavía no he empleado ningunostty ixon
, no estoy seguro de para qué sirve).C-q
se "descongelará". Es yC-s
son los caracteres habituales de control de flujo de software que alguna vez fueron útiles para interrumpir manualmente (pausar) el flujo de salida cuando se usaban conexiones seriales lentas. Ahora la salida es tan rápida en la mayoría de los casos que lo que desea ver cuando presionaC-s
ya se ha desplazado.stty -ixon
apaga el control de flujo de software.Si escribe
!ls
, bash revisará su historial y ejecutará el comando más reciente que comienza con "ls"fuente
podría ser zsh específico. Al investigar esta respuesta , encontré
vi-history-search-backward
que permite buscar /en modo vi (que no mencioné en el que estaba), puede usar ny Nbuscar hacia adelante y hacia atrás respectivamente (después de presionar enter).fuente
Me sorprende que esto no se haya mencionado, pero puede seleccionar el modo vi en bash o ksh haciendo esto:
... o usando esto como el contenido de
~/.inputrc
(para GNU readline usado en programas como bash):Luego, después de eso, puede usar Escpara ingresar al modo de comando y usar kpara retroceder en el historial y javanzar. También puede buscar usando /para buscar normalmente y ?para buscar en reversa.
Si lo usa
~/.inputrc
, esto funcionará no solo en GNU bash sino en cualquier cosa que use GNU readline como CLISP y posiblemente programas como el shell de comandos MySQL y el shell CPAN.fuente
Para avanzar cuando se usa la búsqueda inversa (con el comando Ctrl-R):
Abra su archivo .bashrc:
sudo gedit ~/.bashrc
agregue esta línea (la letra "f" puede reemplazarse por otra que el sistema aún no haya utilizado)
source ~/.bashrc
o. ~/.bashrc
AHORA PUEDE AVANZAR EN LA HISTORIA CON EL ACCESO CORTO: Ctrl + f
Trabajando en Ubuntu 18.04 LTS
fuente
Yo uso siguientes dos la mayor parte del tiempo.
Pero tenga en cuenta que ambos buscan caracteres iniciales.
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+ Ren Bash para mi ksh y tcsh.
fuente
set -o emacs
modo, por cierto.Hay una manera de usar Ctrl, Rcon 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í.
fuente
respuesta similar a @ephemient, pero puede poner en su .bashrc
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 la gente, si quieres puerto a la configuración de un nuevo sistema, es más fácil de recordar para enganchar sólo su
~/.bashrc
continuación, que usted tiene que enganchar a que~/.inputrc
fuente
Sí, existe, al menos si está utilizando zsh. Simplemente comience a escribir el comando y luego presione M-p( ESC p) y encontrará comandos anteriores que coincidan con lo que escribió. Presiónelo nuevamente para encontrar la próxima coincidencia.
fuente