Onde posso encontrar documentação sobre o comando "sudo !!"


Respostas:



29

É verdade sudo !!, que consiste no comando sudo, com o qual você provavelmente está familiarizado, e um designador evento , !!que corresponde ao último comando inserido. Você pode encontrar mais na bashpágina do manual, na Event Designatorsseção

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.

3

Essa separação de funcionalidade é um dos princípios de design mais bonitos, tornando o Linux / Unix muito mais poderoso do que outras alternativas, onde cada programa é uma ilha independente separada de convenções e recursos.

"faça com que cada programa faça uma coisa e faça bem"

Em vez de implementar !! dentro do sudo (ou qualquer outro comando) que possa se beneficiar da repetição do comando anterior - ele é implementado uma vez (nos shells) e todos os comandos podem se beneficiar dele. Então você pode fazer:

$ 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

e assim por diante.

Mas isso não termina aqui. O shell faz muito mais do que expandir a história via! designadores de eventos. Antes de executar seu comando, ele faz expansão variável, expansão de curinga de nome de arquivo (globbing), substituição de comando, redirecionamento de arquivo / E / S e muito mais. Tudo isso pode ser aproveitado e usado em qualquer comando que está sendo chamado a partir do shell.

Outra grande vantagem é que, se você gastar algum tempo aprendendo seu shell ('man bash' neste caso), precisará aprendê-lo uma vez e poderá usar esses recursos poderosos em qualquer lugar, o tempo todo. É muito mais fácil aprender um conjunto de princípios e convenções poderosos, em vez de reaprender como os agrs da linha de comando são tratados em cada programa ou utilitário.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.