Де я можу знайти документацію про команду “sudo !!”


20

Щойно я дізнався, що в Linux є sudo !!команда, яка буквально стосується sudoостанньої введеної команди. Я ніколи про це не чув.

Це загальний контроль? Де я можу знайти документацію про це?


4
Ви можете перевірити commandlinefu.com/commands/browse/sort-by-votes . Деякі дійсно приємні ярлики там.
Лев

2
Дивіться також цю відповідь
Михайло Мрозек

Відповіді:


36

Це просто ярлики. Це sudo!!, до речі. Це sudo !!(відзначте пробіл).

!!У БАШЕЄВ в основному розширення попередньої команди.

Погляньте на розділ «Розширення історії» сторінки bash man:

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


Я редагував попереднє повідомлення, я забув пробіл, як ви сказали!
Пір-Олександр Бушар

О, я ніколи не бачив цієї ярлика ніде!
Пір-Олександр Бушар

29

Це на самому ділі 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.

3

Цей поділ функціональності є одним з найкрасивіших принципів дизайну, що робить 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

і так далі.

Але це не закінчується. Оболонка робить набагато більше, ніж розширення історії за допомогою! позначення подій Перш ніж виконувати вашу команду, вона робить змінне розширення, розширення підстановки імен файлів (глобалізація), підміна команд, перенаправлення файлів / виводу та багато іншого. Все це можна використовувати і використовувати в будь-якій команді, яка викликається з оболонки.

Ще одна велика перевага полягає в тому, що якщо ви витрачаєте деякий час на вивчення своєї оболонки ("man bash" в даному випадку), вам потрібно її навчитися один раз, і ви можете використовувати ці потужні можливості всюди, весь час. Набагато простіше вивчити один набір потужних принципів і конвенцій, а не вивчати, як керуються agrs командних рядків у кожній програмі чи утиліті.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.