¿Puedo buscar el historial en bash y ejecutar el resultado?
Escriba Ctrl Ren la línea de comando y comience a escribir el comando anterior. Una vez que aparece un resultado, sigue golpeando Ctrl Rpara ver otros partidos. Cuando aparezca el comando que desea, simplemente presioneEnter
Tenga en cuenta que si bien Ctrl Res el valor predeterminado, si desea que el comando ( reverse-search-history
) esté vinculado Ctrl T, puede configurarlo con lo siguiente:
enlace '"\ Ct": historial de búsqueda inversa
Hay una gran cantidad de otros comandos vinculables de línea de lectura que también están disponibles para usted. Echa un vistazo a la bash
página del manual .
Bash tiene muchas facilidades para buscar y acceder al historial de comandos interactivos. El más básico de los cuales es el history
incorporado. Escribiendo solo:
$ historia
Imprimirá una lista de comandos junto con un índice numérico, como:
$ historia 1 claro 2 ls -al 3 vim ~ / somefile.txt 4 historia PS
Luego, puede ejecutar cualquiera de estos comandos utilizando su índice numérico introduciendo el índice con un solo !
, como señaló Mitch :
$! 1
Ejecutará el clear
comando. La orden interna historia tiene muchas características en sí, se puede ver más en las bash
y history
hombre páginas.
También puede especificar compensaciones negativas relativas al usar el !
designador, por lo que si utilizamos nuestra lista de historial anterior, si quisiéramos ejecutar vim
nuevamente, podríamos hacer:
$! -2
Lo que básicamente le dice a bash que ejecute el comando que ejecutó "hace dos comandos". Para ejecutar el comando anterior en la lista del historial, solo podemos usar !!
(que es solo una abreviatura de !-1
).
El !
designador no lo limita a especificar numéricamente qué comando ejecutar. hayalci demostró que puede dar instrucciones bash
para ejecutar un comando basado en el texto con el que comienza (usando !
) o en el texto dentro del comando en sí (usando !?
). Nuevamente, usando nuestra lista de historial de ejemplo anterior, si quisiéramos ejecutar clear
nuevamente, todo lo que tenemos que hacer es escribir:
$! cl
y presione Enter. ¿Y de qué vim
? Eso es tan simple como:
$!? algunos
El punto más importante de la respuesta de hayalci es la llamada a la shopt
construcción:
$ shopt -s histverify
Esto permitirá la verificación de la historia para que los comandos que se corresponden con el !
, !!
y !?
designadores no se ejecutan ciegamente, pero en vez cumplimentado en la línea de comandos para que pueda asegurarse de que van a hacer ningún mal antes de ejecutarlas. Esto es aún más importante cuando ejecuta comandos como usuario root. Esta opción se puede configurar en su .bashrc
archivo de inicio para que se configure cada vez que inicie sesión.
Como ya se ha señalado, toda esta información se puede obtener de la bash
página del manual . Por el!, !!, y!? designadores, eche un vistazo a la Sección 9.3 Expansión de la historia .
shopt
va en bashrc, no bash_profile (o no estará habilitado para shells que no sean shells de inicio de sesión).Como alternativa crtl+R, puede buscar en el historial escribiendo
Esto buscará en el historial el comando más reciente que comienza con 'texto'.
Pero le sugiero que ponga esto en su .bashrc para evitar la ejecución de un comando incorrecto.
Esto indica a bash de manera que, después de cualquier acción de historial (como
!!:s/prev_text/after_text
), coloca la línea resultante en el símbolo del sistema. Luego puede revisar o editar el comando, y luego presione Intro.fuente
También puedes hacer:
devolvería algo como
entonces puedes escribir
fuente
Prefiero usar history-search-backward sobre reverse-search-history. El primero le permite escribir algunos caracteres del comando y luego presionar la tecla de búsqueda, en lugar de presionar la tecla de búsqueda primero y luego escribir la cadena de búsqueda.
Por defecto en mi sistema, Mp y Mn se unen a funciones similares, pero prefiero vincular las teclas de flecha:
fuente
Tengo un gran alias, h. Realmente es solo "history | grep", pero filtro las entradas anteriores del "comando h" con el "grep -E -v"
utilizado como
fuente
HISTIGNORE
.Excelente redacción, Sean! Pondría esto en un comentario, pero tengo algunos puntos de reputación tímidos. :-)
Otra técnica relacionada y útil es la capacidad de ejecutar un comando anterior mientras se cambia una palabra. Supongamos que escribió el nombre del directorio o desea cambiar el nombre del archivo:
Observe que el comando se expande, reemplaza y genera antes de que se ejecute el comando, por lo que si se ejecuta el comando incorrecto, puede ver lo que bash pensó que estaba haciendo.
fuente
Como la navegación a través del historial con Ctrl-r es IMO engorrosa, es posible que desee considerar hh :
https://github.com/dvorka/hstr
lo que hace que la navegación sea mucho más simple, directa y eficiente, incluida la ejecución del comando:
fuente
ctrl + r
por defecto ahoraEn el símbolo del sistema bash, escriba control-R, luego escriba algunos caracteres del comando que desee y la función de línea de lectura de bash buscará ese comando en el historial de comandos.
Después de comenzar la búsqueda, puede volver a escribir control-R para saltar al siguiente comando coincidente.
fuente
Si usted tiene su cáscara configurado para utilizar
vi
combinaciones de teclas (set -o vi
o teniendoset editing-mode vi
en$HOME/.inputrc
), entonces se busca con<Esc>/some-command<Return>
y golpearn
(siguiente) oShift-n
(anterior) para desplazarse por la lista de los comandos.fuente
CTRL+ Rfunciona bien, como sugirió @ John1024, pero es algo tedioso si muchos de sus comandos recientes son similares y desea una forma rápida de escanearlos a todos. Una alternativa sería usar
history
:fuente
Me gusta HSTR, pero a veces parece que no puedo instalarlo. Entonces escribí un alias usando fzf que imita su comportamiento (
hx
, para "ejecutar historial")history
: bueno, consigue la historiased
: eliminar la columna de números de la lista (POSIX)fzf
: aquí está la magia, le permite buscar difusamente la lista de forma interactiva, o moverse conC-J
yC-K
, luego, ejecutar un comando conEnter
.--height
: establece el número de líneas que se muestran.--tac
: revertir lista (más lógico para un historial)--tiebreak=index
: mantener el orden del historial cuando fzf actualiza los resultadosfuente