Où puis-je trouver de la documentation sur la commande "sudo !!"


20

Je viens d'apprendre que Linux a une sudo !!commande qui s'applique littéralement sudoà la dernière commande entrée. Je n'en avais jamais entendu parler.

Est-ce un contrôle commun? Où puis-je trouver de la documentation à ce sujet?


4
Vous voudrez peut-être consulter commandlinefu.com/commands/browse/sort-by-votes . De très bons raccourcis là-bas.
Leo

Réponses:


36

Ce ne sont que des raccourcis bash. Ce n'est pas sudo!!, d'ailleurs. C'est sudo !!(notez l'espace).

La commande !!in bash est essentiellement une extension de la commande précédente.

Jetez un œil à la section "History Expansion" de la page de manuel bash:

http://www.gnu.org/software/bash/manual/bashref.html#Event-Designators


J'ai édité mon post précédent, j'ai oublié l'espace comme tu l'as dit!
Pier-Alexandre Bouchard

Oh, je n'ai jamais vu ce raccourci nulle part!
Pier-Alexandre Bouchard

29

Il est en fait sudo !!, qui se compose de la commande sudo, avec laquelle vous êtes probablement familier, et un désignateur événement , !!qui se réfère à la dernière commande entrée. Vous pouvez en trouver plus dans la bashpage de manuel, sous la Event Designatorssection.

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

Cette séparation des fonctionnalités est l'un des plus beaux principes de conception rendant Linux / Unix tellement plus puissant que les autres alternatives où chaque programme est un îlot indépendant distinct de conventions et de capacités.

"faire en sorte que chaque programme fasse une chose et le fasse bien"

Plutôt que d'implémenter !! dans sudo (ou toute autre commande) qui peut bénéficier de la répétition de la commande précédente - elle est implémentée une fois (dans les shells) et toutes les commandes peuvent en bénéficier. Vous pouvez donc faire:

$ 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

etc.

Mais cela ne s'arrête pas là. Le shell fait bien plus que d'étendre l'histoire via le! désignateurs d'événements. Avant d'exécuter votre commande, il effectue une expansion variable, une expansion générique du nom de fichier (globbing), une substitution de commande, une redirection de fichier / E / S et bien plus encore. Tout cela peut être exploité et utilisé dans n'importe quelle commande qui est invoquée à partir du shell.

Un autre gros avantage est que si vous passez un peu de temps à apprendre votre shell (`` man bash '' dans ce cas), vous devez l'apprendre une fois et vous pouvez utiliser ces puissantes capacités partout, tout le temps. Il est beaucoup plus facile d'apprendre un ensemble de principes et de conventions puissants, plutôt que de réapprendre comment les agrs de ligne de commande sont traités dans chaque programme ou utilitaire.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.