Respuestas:
La forma más simple es ejecutar:
sudo !!
Esto ejecutará el último comando pero como superusuario.
Fuente .
!!
por sí solo ejecuta su comando anterior según lo guardado en history
. Además, hacer !-1
, !-2
y así sucesivamente ejecuta su último comando, el segundo último comando, etc. ¡Práctico!
!<command>
ejecutará el último evento desde ~/.bash_history
ese comienzo con<command>
!
cosa de bash copiada tcsh
me ha jodido más veces de lo que alguna vez ha sido útil. Las comillas dobles no protegen de la interpretación de !
. $ foo "!bar"
-> !bar: event not found
.
respuesta : ingresa sudo !!
directamente después para repetir el comando anterior con privilegios escalados.
editar: imagen encontrada a través de reddit , y es una parodia del cómic original xkcd de Randall Munroe.
Puede probar la tecla de flecha hacia arriba para desplazarse por sus comandos anteriores y volver a escribirlos / cambiarlos y agregarlos sudo
delante de ellos. (el botón de inicio sobre las teclas de flecha establecerá la posición al principio).
No me gusta la sudo !!
idea, porque a veces agregas otro comando en el medio y ya no lo recuerdo.
sudo !!
, el shell se expandirá !!
para que pueda ver qué comando está tratando de ejecutar. Por lo tanto, puede terminar siendo irritante presionar Ctrl-C y encontrar el comando correcto, pero al menos no lo tomará por sorpresa.
!!
sudo !!<TAB>
y se completa automáticamente !!
para mí. Bash puede expandir el historial con M-^
(para mí, alt + shift + 6), pero eso es menos fluido (aunque podría volver a vincular esto). También existe shopt -s histverify
, lo que hace que cuando use la expansión del historial y presione enter, en su lugar, le dará otra línea de aviso con la expansión realizada para permitirle verla / editarla.
shopt -s histverify
no ayudará un poco. La mayoría de las personas se acostumbrarán a golpear Enter
dos veces. En ese momento todavía son demasiado tarde para verificar lo que sucedió.
Solo agregaré una alternativa: tan breve como escribir sudo !!
y más flexible:
Up-arrow (once, or until you find the command you want to sudo/edit, if it's older)
ctrl+A (place cursor at beginning of line)
"sudo "
Enter
Es exactamente el mismo número de pulsaciones de teclas (cuento "ctrl + A" como una ...), pero agregando "flecha arriba" puede hacerlo en cualquier comando que esté en su historial.
set -o vi
). Luego puede escapar (ir al modo de comando) y luego 'I' (mayúscula 'i', insertar al comienzo de la línea).
Hay algunas maneras de hacer esto.
Simplemente ingrese el comando nuevamente agregando sudo
antes del comando
Presione Up arrowpara obtener el último comando y ponerlo sudo
delante.
Entrar sudo !!
El se !!
expande al último comando ingresado. Puedes hacer cosas similares con otras cosas con el historial de la línea de comandos, mira aquí
Esta pregunta podría haberse generalizado en " Ejecutar el mismo comando pero con alguna modificación ", ya que una de las decisiones de diseño brillantes en Unix es que lo que se implementa una vez en el shell, puede ser aprovechado por cualquier comando que se invoque desde el shell.
En otras palabras, este truco no se aplica solo a sudo
:
sudo !!
)time !!
)env A=b B=z !!
)!!
)La expansión del historial (también conocida como sustitución del historial) es solo una función de shell para facilitar la repetición de comandos anteriores (con menos pulsaciones de teclas). Revise su página de manual de shell para history expansion
. Describe muchos más trucos y atajos que puedes hacer con el historial, por ejemplo:
Puede consultar los comandos anteriores por número:
!55 # repeat command number 55
!-1 # repeat the previous command, alias for !!
!-2 # repeat the command before the previous command
Puede referirse a palabras individuales en comandos anteriores:
some-command !$ # run some-command on the last arg of previous command
También puede buscar antes de repetir:
!?awk # repeat the last command including the string 'awk'
Puede buscar en el historial y reemplazar algo por otra cosa:
!?awk?:s/str1/str2/ # repeat previous command matching 'awk' replacing str1 by str2
Y mucho más, ya que puede combinar selección de comandos, selección de argumentos, buscar y reemplazar de forma independiente.
La página de manual de su shell (en este caso man bash
) es su amigo.
Uso zsh en lugar de bash y tengo esto en mi ~/.zshrc
, por lo que presiono Alt+ Sinserta sudo
al comienzo de la línea de comando:
insert_sudo () { zle beginning-of-line; zle -U "sudo " }
zle -N insert-sudo insert_sudo
bindkey "^[s" insert-sudo
Desafortunadamente, no pude encontrar una manera de hacer lo mismo en bash.
Si desea hacerlo en un alias, debe usarlo alias redo='sudo $(history -p !!)'
por alguna razón.
La forma en que lo prefiero:
Pero puede ser más fácil hacer "sudo !!", depende de usted.