A veces, cuando ejecuto un comando, no me doy cuenta de que necesito ejecutarlo como superusuario para tener suficiente permiso.
¿Hay alguna manera de volver a ejecutar el mismo comando pero como superusuario?
command-line
sudo
Trufa
fuente
fuente
!!
por sí solo ejecuta su comando anterior según lo guardado enhistory
. 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 copiadatcsh
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.
fuente
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.fuente
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 conM-^
(para mí, alt + shift + 6), pero eso es menos fluido (aunque podría volver a vincular esto). También existeshopt -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 golpearEnter
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: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.
fuente
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 comandoPresione 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ífuente
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:
Puede referirse a palabras individuales en comandos anteriores:
También puede buscar antes de repetir:
Puede buscar en el historial y reemplazar algo por otra cosa:
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.fuente
Uso zsh en lugar de bash y tengo esto en mi
~/.zshrc
, por lo que presiono Alt+ Sinsertasudo
al comienzo de la línea de comando:Desafortunadamente, no pude encontrar una manera de hacer lo mismo en bash.
fuente
~/.inputrc
"\es":"\C-asudo "
y se moverá al comienzo de una línea larga y sudo se insertará al comienzo de la línea al presionaralt-s
. Reinicie el terminal o vuelva a leer~/.inputrc
para que funcione.Si desea hacerlo en un alias, debe usarlo
alias redo='sudo $(history -p !!)'
por alguna razón.fuente
Si no tiene permiso para ser root con sudo o el programa sudo no se instaló en el sistema.
fuente
La forma en que lo prefiero:
Pero puede ser más fácil hacer "sudo !!", depende de usted.
fuente