Что делает «apt-get install !!» и как заставить его работать?

54

Я видел, как кто-то печатает

apt-get install !!

Он делал это несколько раз и каждый раз, была установлена ​​другая программа. Кажется, он автоматически выяснил, что нужно дальше.

Однако, когда я попробовал это на своей виртуальной машине Ubuntu 14.04.1 LTS, он просто показал некоторые инструкции по использованию. Googling для apt-get install !! не работает очень хорошо. Многие результаты поиска не содержат двойной восклицательный знак.

Что делает apt-get install !! и чего не хватает на моей машине, чтобы он не работал?

    
задан Thomas Weller 24.05.2015 в 21:11
источник

5 ответов

75

!! - это ярлык в bash, который означает выполнение последней команды.

Попробуйте следующее:

 echo hello
 !!

В этом контексте !! будет расширено до другого echo hello .

Я представляю, что произошло, когда они пытались запустить команду, и она потерпела неудачу и жаловалась, что она не установлена. Итак, они набрали sudo apt-get install !! , потому что имя пакета совпало с именем команды, которую они пытались запустить. Полученная команда попытается установить пакет с тем же именем, что и команда, которую они только что пытались выполнить.

    
ответ дан Stephen 24.05.2015 в 21:12
источник
41

!! не имеет ничего общего с apt-get . Это ключевое слово оболочки, которое будет расширено до предыдущей команды. Это расширение выполняется оболочкой перед интерпретацией текущей команды.

От man bash :

  

!! Обратитесь к предыдущей команде. Это синоним   для '! -1'.

Например, если вы запустите команду:

echo "foo"

Затем, если вы запустите:

sudo apt-get install !!

он будет расширен до:

sudo apt-get install echo foo

Как вы можете видеть, он расширен в два пакета, а именно echo , а другой - foo . Нет отдельного пакета с именем foo и echo . Помимо оболочки, встроенной echo , существует /bin/echo исполняемый файл, который является частью пакета GNU-coreutils. Итак, вы получите ошибки, говорящие, что таких пакетов нет.

С другой стороны, другой человек может делать что-то вроде этого:

$ cowsay
The program 'cowsay' is currently not installed. You can install it by typing:
sudo apt-get install cowsay

$ sudo apt-get install !!
sudo apt-get install cowsay
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Suggested packages:
  filters
The following NEW packages will be installed:
  cowsay
0 upgraded, 1 newly installed, 0 to remove and 119 not upgraded.
Need to get 18.5 kB of archives.

Как вы видите, cowsay устанавливается.

Я бы предложил вам не делать этого (если вы не уверены), явное не вредит.

    
ответ дан heemayl 24.05.2015 в 21:27
16

!! : см. предыдущую команду. Это синоним для !-1 ( источник ).

Например, если я выполняю:

./test

, то помните, что мне нужно быть Root, тогда я мог бы просто ввести:

sudo !!

это то же самое, что и набрав:

sudo ./test

Это полезно, когда ваша последняя команда содержит много символов.

    
ответ дан Bilal 24.05.2015 в 21:17
2

Вопрос уже ответил, поэтому я не буду повторяться. Тем не менее, я хотел бы отметить, что в разных оболочках существует множество таких ярлыков, которые помогают повторять / находить / редактировать команды. Некоторые из них я использую:

  1. !$ , за которым следует ENTER , введите последнее слово последней команды. Например,

    ls -l /let/me/in
    cd !$
    

Это выведет вас в /let/me/in

  1. Ctrl - R , а затем введите несколько слов из предыдущей команды. Например, если вы набрали vi /home/mycoolproject.sh и последовали за ним с некоторыми случайными командами, такими как ls , cd , pwd и т. Д., То просто введите Ctrl - R , за которым следует cool , вытащит эту команду vi .

Просто найдите сочетания клавиш bash (или csh или что-то еще), и это будет лучшее, что вы сделали сегодня!

    
ответ дан Hopping Bunny 29.05.2015 в 06:32
-2

Как описано в предыдущей команде, но лучше не использовать это как свою неряшливую короткую руку. Быть более простым является простым и безопасным.

$ vim index.php
The program 'vim' is currently not installed. You can install it by typing:
sudo apt-get install cowsay

$ sudo apt-get install !!
# Would be done as sudo apt-get install vim index.php instead of sudo apt-get install vim
    
ответ дан Christopher Shaw 27.05.2015 в 12:35