¿Cómo puedo buscar en el historial de bash y volver a ejecutar un comando?
¿Puedo buscar el historial en bash y ejecutar el resultado?
¿Puedo buscar el historial en bash y ejecutar el resultado?
Como alternativa a crtl+R, puedes buscar en el historial escribiendo
!text
Esto buscará en el historial el comando más reciente que comience con ‘text’.
Pero te sugiero que pongas esto en tu .bashrc para evitar la ejecución de un comando equivocado.
shopt -s histverify
Esto instruye a bash para que, después de cualquier acción del historial (como !!:s/prev_text/after_text
), coloque la línea resultante en el símbolo del sistema. Entonces puede revisar o editar el comando, y presionar Enter después.
Yo prefiero utilizar el historial de búsqueda hacia atrás en lugar del historial de búsqueda hacia atrás. El primero te permite escribir unos cuantos caracteres del comando luego pulsar la tecla de búsqueda, en lugar de pulsar primero la tecla de búsqueda y luego escribir la cadena de búsqueda.
Por defecto en mi sistema, M-p y M-n se vinculan a funciones similares, pero prefiero vincular las teclas de dirección:
bind '"\e[A":history-search-backward'
bind '"\e[B":history-search-forward'
¡Excelente redacción, Sean! Lo pondría en un comentario, pero me faltan unos cuantos puntos de reputación :-)
Otra técnica relacionada y útil es la posibilidad de ejecutar un comando anterior mientras se cambia una palabra. Digamos que escribiste el nombre del directorio, o quieres cambiar el nombre del archivo:
$ echo my name is bob my name is bob $ ^bob^jordan echo my name is jordan my name is jordan
Fíjate que el comando se expande, se reemplaza y sale antes de ejecutar el comando, así que si se ejecuta el comando equivocado puedes ver lo que bash pensó que estaba haciendo.
Como la navegación a través del historial utilizando Ctrl-r es OMI engorroso, es posible que desee considerar hh : https://github.com/dvorka/hstr
que hace la navegación mucho más simple, directa y eficiente - incluyendo la ejecución del comando:
En la línea de comandos de bash, escriba control-R, luego escriba algunos caracteres del comando que desea y la función readline de bash buscará ese comando en el historial de comandos.
Una vez iniciada la búsqueda, puede escribir control-R de nuevo para saltar al siguiente comando que coincida.
Si tienes tu shell configurado para usar los enlaces de las teclas vi
(set -o vi
o tener set editing-mode vi
en $HOME/.inputrc
), entonces buscas con <Esc>/some-command<Return>
y pulsas n
(siguiente) o Shift-n
(anterior) para recorrer el historial de la línea de comandos.
Me gusta HSTR pero a veces no consigo instalarlo. Así que escribí un alias usando fzf que imita su comportamiento (hx
, para “ejecutar el historial”)
alias hx='eval $(history | sed "s/^ *[0-9]* *//g" | fzf --tac --tiebreak=index --height=10)'
history
: bien, consigue el historial sed
: quita la columna de números de la lista (POSIX) fzf
: aquí está la magia, te permite buscar difusamente en la lista de forma interactiva, o moverte con C-J
y C-K
, luego ejecutar un comando con Enter
. --height
: establece el número de líneas mostradas. --tac
: revertir la lista (más lógico para un historial) --tiebreak=index
: mantener el orden del historial cuando fzf actualiza los resultados