O que o “apt-get install !!” faz e como fazê-lo funcionar?

54

Eu vi alguém digitando

apt-get install !!

Ele fez isso algumas vezes e todas as vezes, um programa diferente foi instalado. Parece que ele descobriu automaticamente o que é necessário em seguida.

No entanto, quando eu tentei na minha máquina virtual Ubuntu 14.04.1 LTS, ela mostrou apenas algumas instruções de uso. Pesquisando por apt-get install !! parece não funcionar muito bem. Muitos resultados da pesquisa não contêm o ponto de exclamação duplo.

O que o apt-get install !! faz e o que poderia estar faltando na minha máquina que não funcionou?

    
por Thomas Weller 24.05.2015 / 21:11

5 respostas

75

!! é um atalho no bash que significa que o último comando foi executado.

Tente isto:

 echo hello
 !!

Nesse contexto, o !! será expandido para outro echo hello .

Eu imagino o que aconteceu foi que eles tentaram executar um comando e ele falhou e reclamou que não foi instalado. Então, eles digitaram sudo apt-get install !! porque o nome do pacote coincidentemente era o mesmo que o nome do comando que eles tentaram executar. O comando resultante tentaria instalar um pacote com o mesmo nome do comando que eles haviam tentado executar.

    
por Stephen 24.05.2015 / 21:12
41

!! não tem nada a ver com apt-get . É uma palavra-chave do shell que será expandida para o comando anterior. Essa expansão é feita pelo shell antes que o comando atual seja interpretado.

De man bash :

  

!! Consulte o comando anterior. Este é um sinônimo   para '! -1'.

Por exemplo, se você executar um comando:

echo "foo"

Então, se você executar:

sudo apt-get install !!

será expandido para:

sudo apt-get install echo foo

Como você pode ver, ele é expandido em dois pacotes, a saber, echo e o outro é foo . Não há pacote autônomo chamado foo e echo . Além do shell embutido echo , há /bin/echo executável que faz parte do pacote GNU-coreutils. Então, você receberá erros dizendo que nenhum desses pacotes está disponível.

Por outro lado, a outra pessoa pode estar fazendo algo assim:

$ 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.

Como você pode ver, o cowsay está sendo instalado.

Eu sugiro que você não faça isso (a menos que tenha certeza), ser explícito não prejudica.

    
por heemayl 24.05.2015 / 21:27
16

!! : Consulte o comando anterior. Este é um sinônimo para !-1 (a fonte ).

Por exemplo, se eu executar:

./test

lembre-se que eu preciso ser o Root, então eu poderia simplesmente digitar:

sudo !!

é o mesmo que digitar:

sudo ./test

É útil quando seu último comando contém muitos caracteres.

    
por Bilal 24.05.2015 / 21:17
2

A pergunta já foi respondida, então não serei repetitivo. No entanto, gostaria de salientar que existem numerosos atalhos em vários shells que ajudam a repetir / localizar / editar comandos. Alguns dos que eu uso são:

  1. !$ seguido por ENTER irá digitar a última palavra do último comando. Por exemplo,

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

Isso te levará em /let/me/in

  1. Ctrl - R e depois digite algumas palavras de um comando anterior. Por exemplo, se você digitar vi /home/mycoolproject.sh e segui-lo com alguns comandos aleatórios como ls , cd , pwd , etc., basta digitar Ctrl - R seguido por cool irá ativar o comando vi .

Basta procurar por atalhos de teclado bash (ou csh ou qualquer outro) e será a melhor coisa que você fez hoje!

    
por Hopping Bunny 29.05.2015 / 06:32
-2

Como descrito é o comando anterior, mas é melhor não usar isso como uma mão curta desleixada. Ser mais direto é simples e seguro.

$ 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
    
por Christopher Shaw 27.05.2015 / 12:35