Где может я находить документацию о “sudo!!” команда

3 ответа

Это - просто ярлыки удара. Это не sudo!!, между прочим. Это sudo !! (отметьте пространство).

!! в ударе в основном расширение предыдущей команды.

Смотрите на раздел "History Expansion" страницы справочника удара:

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

36
27.01.2020, 19:43
  • 1
    я отредактировал свое предыдущее сообщение, я забыл пространство, как Вы сказали! –  Pier-Alexandre Bouchard 08.05.2012, 22:08
  • 2
    О, я никогда не видел этот ярлык нигде! –  Pier-Alexandre Bouchard 08.05.2012, 22:09

Это на самом деле sudo !!, который состоит из команды sudo, с которым Вы, вероятно, знакомы, и указатель события, !!, который относится к последней вводимой команде. Можно найти больше в bash страница справочника, под Event Designators раздел.

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.
29
27.01.2020, 19:43

Это разделение функциональности является одним из самых красивых принципов разработки, делающих Linux/Unix, настолько более мощный, чем другие альтернативы, где каждая программа является отдельным независимым островом конвенций и возможностей.

"заставьте каждую программу сделать одну вещь и сделать это хорошо"

Вместо реализации!! внутри sudo (или любая другая команда), который может извлечь выгоду из повторения предыдущей команды - это реализовано однажды (в оболочках), и все команды могут извлечь выгоду из него. Таким образом, можно сделать:

$ 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

и так далее.

Но это не заканчивается здесь. Оболочка делает намного больше, чем расширяющаяся история через! указатели события. Прежде, чем выполнить Вашу команду, это делает переменное расширение, подстановочное расширение имени файла (globbing), управляет заменой, file/IO перенаправление, и многое другое. Все из которых могут усиливаться и использоваться в любой команде, это вызывается от оболочки.

Другое большое преимущество состоит в том, что при пребывании в течение некоторого времени, изучая оболочку ('удар человека' в этом случае) необходимо изучить это однажды, и можно использовать эти мощные возможности везде все время. Намного легче изучить один набор мощных принципов и конвенций, вместо того, чтобы повторно изучить, как командная строка agrs обрабатывается в каждой программе или утилите.

3
27.01.2020, 19:43

Теги

Похожие вопросы