Que fait "apt-get install !!" et comment le faire fonctionner?

54

J'ai vu quelqu'un taper

apt-get install !!

Il l'a fait à quelques reprises et à chaque fois, un programme différent a été installé. Il semble que cela a automatiquement compris ce qui est nécessaire ensuite.

Cependant, lorsque je l’ai essayé sur ma machine virtuelle Ubuntu 14.04.1 LTS, certaines instructions d’utilisation sont apparues. Googler pour apt-get install !! ne semble pas fonctionner très bien. De nombreux résultats de recherche ne contiennent pas le double point d'exclamation.

Qu'est-ce que apt-get install !! fait et qu'est-ce qui pourrait manquer sur ma machine?     

posée Thomas Weller 24.05.2015 - 21:11
la source

5 réponses

74

!! est un raccourci dans bash qui signifie que la dernière commande a été exécutée.

Essayez ceci:

 echo hello
 !!

Dans ce contexte, le !! sera étendu à un autre echo hello .

J'imagine ce qui s'est passé: ils ont essayé de lancer une commande et celle-ci a échoué et s'est plaint qu'elle n'était pas installée. Donc, ils ont tapé sudo apt-get install !! parce que le nom du paquet était par hasard identique au nom de la commande qu'ils ont essayé d'exécuter. La commande résultante tenterait d'installer un package du même nom que la commande qu'il venait de tenter d'exécuter.

    
réponse donnée Stephen 24.05.2015 - 21:12
la source
41

!! n'a rien à voir avec apt-get . C'est un mot-clé shell qui sera étendu à la commande précédente. Cette extension se fait par shell avant l'interprétation de la commande en cours.

De man bash :

  

!! Reportez-vous à la commande précédente. Ceci est un synonyme   pour '! -1'.

Par exemple, si vous exécutez une commande:

echo "foo"

Ensuite, si vous lancez:

sudo apt-get install !!

il sera étendu à:

sudo apt-get install echo foo

Comme vous pouvez le voir, il est développé en deux paquets, à savoir echo et l’autre est foo . Il n'y a pas de package autonome nommé foo et echo . Mis à part le shell intégré echo , il existe /bin/echo executable qui fait partie du paquet GNU-coreutils. Donc, vous aurez des erreurs en disant que de tels paquets ne sont pas disponibles.

D'autre part, l'autre personne pourrait faire quelque chose comme ça:

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

Comme vous pouvez le voir, cowsay est en cours d’installation.

Je vous suggère de ne pas le faire (sauf si vous en êtes sûr), le fait d’être explicite ne nuit pas.

    
réponse donnée heemayl 24.05.2015 - 21:27
la source
16

!! : reportez-vous à la commande précédente. Ceci est un synonyme de !-1 (la source ).

Par exemple, si j'exécute:

./test

alors souvenez-vous que je dois être root, alors je pourrais simplement taper:

sudo !!

c'est la même chose que de taper:

sudo ./test

C'est utile lorsque votre dernière commande contient beaucoup de caractères.

    
réponse donnée Bilal 24.05.2015 - 21:17
la source
2

La question a déjà reçu une réponse, donc je ne serai pas répétitif. Cependant, j'aimerais souligner que de nombreux raccourcis de ce type dans différents shells aident à répéter / trouver / modifier des commandes. Certains de ceux que j'utilise sont:

  1. !$ suivi de ENTER va taper le dernier mot de la dernière commande. Par exemple,

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

Cela vous amènera dans /let/me/in

  1. Ctrl - R puis tapez quelques mots d'une commande précédente. Par exemple, si vous avez tapé vi /home/mycoolproject.sh et que vous avez suivi certaines commandes aléatoires telles que ls , cd , pwd , etc., il vous suffit de taper Ctrl - R suivi de cool récupérera cette commande vi .

Recherchez simplement les raccourcis clavier bash (ou csh ou autre) et ce sera la meilleure chose que vous ayez faite aujourd'hui!

    
réponse donnée Hopping Bunny 29.05.2015 - 06:32
la source
-2

Comme décrit la commande précédente, mais il est préférable de ne pas l'utiliser comme une main courte bâclée. Être plus direct est simple et plus sûr.

$ 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
    
réponse donnée Christopher Shaw 27.05.2015 - 12:35
la source

Lire d'autres questions sur les étiquettes