Edité mi publicación anterior, ¡olvidé el espacio como dijiste!
Pier-Alexandre Bouchard
¡Oh, nunca vi este atajo en ninguna parte!
Pier-Alexandre Bouchard
29
En realidad sudo !!, la cual consiste en el comando sudo, con el que es probablemente familiar, y un designador de evento , !!que se refiere al último comando introducido. Puede encontrar más en la bashpágina de manual, en la Event Designatorssección.
Event Designators
An event designator is a reference to a command line entry in the his‐
tory list. Unless the reference is absolute, events are relative to
the current position in the history list.
! Start a history substitution, except when followed by a blank,
newline, carriage return, = or ( (when the extglob shell option
is enabled using the shopt builtin).
!n Refer to command line n.
!-n Refer to the current command minus n.
!! Refer to the previous command. This is a synonym for `!-1'.
!string
Refer to the most recent command preceding the current position
in the history list starting with string.
!?string[?]
Refer to the most recent command preceding the current postition
in the history list containing string. The trailing ? may be
omitted if string is followed immediately by a newline.
^string1^string2^
Quick substitution. Repeat the previous command, replacing
string1 with string2. Equivalent to ``!!:s/string1/string2/''
(see Modifiers below).
!# The entire command line typed so far.
Esta separación de funcionalidad es uno de los principios de diseño más bellos que hacen que Linux / Unix sea mucho más poderoso que otras alternativas en las que cada programa es una isla independiente separada de convenciones y capacidades.
"haz que cada programa haga una cosa y hazlo bien"
En lugar de implementar !! dentro de sudo (o cualquier otro comando) que puede beneficiarse de repetir el comando anterior: se implementa una vez (en los shells) y todos los comandos pueden beneficiarse de él. Entonces puedes hacer:
$ echo !!# will echo the last command
$ time !!# will repeat and time the last command
$ strace !!# will repeat the last program while system-call tracing it
y así.
Pero no termina aquí. ¡El shell hace mucho más que expandir la historia a través de! designadores de eventos. Antes de ejecutar su comando, realiza expansión variable, expansión de comodines de nombre de archivo (globbing), sustitución de comandos, redirección de archivo / E / S y mucho más. Todo lo cual se puede aprovechar y usar en cualquier comando que se invoque desde el shell.
Otra gran ventaja es que si pasas un tiempo aprendiendo tu shell ('man bash' en este caso) necesitas aprenderlo una vez y puedes usar estas poderosas capacidades en todas partes, todo el tiempo. Es mucho más fácil aprender un conjunto de principios y convenciones poderosas, en lugar de volver a aprender cómo se manejan las líneas de comando en cada programa o utilidad.
Respuestas:
Esto es solo atajos bash. No lo es
sudo!!
, por cierto. Essudo !!
(tenga en cuenta el espacio).El
!!
en bash es básicamente una expansión de la orden anterior.Eche un vistazo a la sección "Expansión del historial" de la página de manual de bash:
http://www.gnu.org/software/bash/manual/bashref.html#Event-Designators
fuente
En realidad
sudo !!
, la cual consiste en el comandosudo
, con el que es probablemente familiar, y un designador de evento ,!!
que se refiere al último comando introducido. Puede encontrar más en labash
página de manual, en laEvent Designators
sección.fuente
Esta separación de funcionalidad es uno de los principios de diseño más bellos que hacen que Linux / Unix sea mucho más poderoso que otras alternativas en las que cada programa es una isla independiente separada de convenciones y capacidades.
"haz que cada programa haga una cosa y hazlo bien"
En lugar de implementar !! dentro de sudo (o cualquier otro comando) que puede beneficiarse de repetir el comando anterior: se implementa una vez (en los shells) y todos los comandos pueden beneficiarse de él. Entonces puedes hacer:
y así.
Pero no termina aquí. ¡El shell hace mucho más que expandir la historia a través de! designadores de eventos. Antes de ejecutar su comando, realiza expansión variable, expansión de comodines de nombre de archivo (globbing), sustitución de comandos, redirección de archivo / E / S y mucho más. Todo lo cual se puede aprovechar y usar en cualquier comando que se invoque desde el shell.
Otra gran ventaja es que si pasas un tiempo aprendiendo tu shell ('man bash' en este caso) necesitas aprenderlo una vez y puedes usar estas poderosas capacidades en todas partes, todo el tiempo. Es mucho más fácil aprender un conjunto de principios y convenciones poderosas, en lugar de volver a aprender cómo se manejan las líneas de comando en cada programa o utilidad.
fuente