Solo una pregunta para mejorar mis bash
habilidades. Siempre hago esto:
$ history | grep some_long_command
...
...
123 some_long_command1.........
124 some_long_command2.........
...
Luego puedo ejecutar el comando que encontré haciendo:
!123
Sin embargo, a menudo quiero hacer esto:
some_long_command1foobar
Es decir, cambie el comando antes de ejecutarlo. ¿Puedes usar bash para ejecutar este comando en su lugar?
#some_long_command1
por lo que se comenta.
Entonces no tengo que usar mi mouse para resaltar el comando, editarlo y luego ejecutarlo (puedo usar el teclado, más rápido).
Supongo que podría escribir un script para hacerlo, pero es posible que ya haya una funcionalidad incorporada en alguna parte ...
linux
bash
command-line
cerveza inglesa
fuente
fuente
bind Space:magic-space
ingrese su perfil de bash. Luego, presionarSpace
se expandirá!123
asome_long_command1
.Respuestas:
Sugeriría que en lugar de usar el comando de historial, use
ctrl+r
y comience a escribir ese comando. Cuando presiona una tecla de flecha como si fuera a modificarla, saldrá del reconocimiento de autocompletar y le permitirá editar antes de ejecutar.ACTUALIZAR: también, si desea recorrer los diferentes comandos que contienen la cadena que acaba de escribir, siga presionando
ctrl+r
fuente
set -o vi
), también puede usarlas/
para buscar en el historial y editarlo.ctr+r
, comienza a escribir, luego, cuando quieras encontrar todos los comandos que contienen eso, simplemente sigue presionandoctrl+r
. En otras palabras, lo que quieres hacer con arriba / abajo se hace (en forma de round robin) conctrl+r
En realidad, puede agregar
:p
el comando para imprimirlo sin ejecutarlo. Por ejemplo:Se imprimirá
ls -la
como el comando anterior sin ejecutarlo, y puede presionar ↑(arriba) para encontrarlo y editarlo.Tu tambien puedes hacer
para imprimir el comando 123 como su comando anterior.
fuente
!mycmd:p
. Si tiene los comandos vi activados en Bash, la respuesta de Pursell es igual de buena o mejor. Ctrl-r, como lo menciona Miquel, es la siguiente mejor opción.También puedes probar
fc
comando para editar el comando en el historial.WIKI dice,
Además de la búsqueda incremental inversa ( Ctrl+ R), tenemos algunos atajos de bash más :
De
man bash
:fuente
Ejecutará el comando 123 reemplazando la cadena 'antigua' con la cadena 'nueva'.
fuente
Puede acceder al modo de edición presionando M- ^ (opción-shift-6 en una mac).
Escribe esto:
Y estará editando el comando # 123. Es como usar ctrl-r, pero comenzando con la sintaxis del signo de exclamación.
fuente
M-^
puede volver a unir a algo más amigable para los dedos?En lugar de usar el
history
comando, vinculehistory-search-backward
/history-search-forward
a los atajos de teclado que se pueden recordar fácilmente (prefiero PgUp / PgDown). Para hacer eso, ponga esto en su.inputrc
archivo:"<key code>": history-search-backward "<key code>": history-search-forward
Para obtener
<key code>
, escribaCtrl-V <key>
el shell y reemplace el inicio^[
con\e
lo que se generó.Una vez configurado, puede escribir
some
y presionar RePág para obtenersome_long_command
. Si lo necesita,some_long_command with_some_arg
pero hay un comando similarsome_long_command with_some_other_arg
más adelante en el historial, puede recorrer hasta que lo alcance escribiendosome
y luegosome
presionando Re Pág repetidamente, o puede escribir , presione Re Pág, mueva el cursor hacia donde los dos comandos comienzan a diferir, escriba algunos caracteres y presione PgUp una vez más. Esta capacidad de paginar rápidamente / diferenciar entre comandos similares la convierte, en mi opinión, en una herramienta mucho más cómoda queCtrl-R
.fuente
También puedes poner
shopt -s histverify
en su
.bash_profile
, lo que hace que cualquier expansión del historial aparezca en su línea de comando sin ejecutarlo, lo que le permite editar antes de hacerlo.fuente
Puede probar el "cuadro de sugerencias", como el historial https://github.com/dvorka/hstr , lee el historial de Bash y permite una navegación rápida.
Para obtener el último comando, simplemente escriba hh, navegue hasta el comando y use la flecha derecha para obtenerlo en la línea de comando (donde puede editarlo y / o agregar un comentario).
fuente
^ p para obtener el último comando escrito en unix / solaris
fuente
Poner
alias r = 'fc -s'
en su
.bashrc
(directorio de inicio) entonces puede escribiren el símbolo del sistema y ejecutará una copia del último
<whatever>
comando (los mismos parámetros) que está en su historial. simplemente presione la flecha hacia arriba para ver lo que ha ejecutado si siente la necesidad.fuente