Как дела? работать в bash?

Очень полезно, когда вы забудете sudo в начале вашей команды, !! действует как псевдоним предыдущей команды. Пример :

 $ mv /very/long/path/for/a/protected/sensible/file/caution.h . (...) Permission denined $ sudo !! sudo mv /very/long/path/for(...) . [sudo] password : 
  • Как мы называем это двойным !! трюк? Из-за этого токена труднее исследовать через Интернет.
  • Как это работает ? Я подозреваю связь с командой истории.
  • Где это определено? Могу ли я определить кого-то другого?

EDIT: некоторые интересные обозначения событий

!!:*

Это относится к аргументам предыдущей команды. Случай использования:

 cat /a/file/to/read/with/long/path nano !!:* 

:p

Просто распечатайте команду, не выполняя ее, вы должны поместить ее в конце обозначения события.

 $ !-5:p sudo rm /etc/fstab -f 

Больше здесь .

!! приведен в руководстве bash под заголовком «Event Designators»:

  An event designator is a reference to a command line entry in the history 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 posi- tion in the history list starting with string. !?string[?] Refer to the most recent command preceding the current posi- tion in the history list containing string. The trailing ? may be omitted if string is followed immediately by a new- line. ^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. 

Так что !! будет заменен предыдущей командой.

Обратите внимание, что история оболочки не будет содержать литерал !! но вместо фактической команды, которая была выполнена:

 $ ls [some output] $ !! . [same output] $ history 3 645 2016-08-25 17:40:55 ls 646 2016-08-25 17:40:57 ls . 647 2016-08-25 17:41:00 history 3