54 votes

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

J'ai vu quelqu'un taper

apt-get install !!

Il l'a fait plusieurs fois et à chaque fois, un programme différent était installé. Il semble qu'il ait automatiquement trouvé ce qui est nécessaire ensuite.

Cependant, lorsque je l'ai essayé sur ma machine virtuelle Ubuntu 14.04.1 LTS, il n'a montré que quelques instructions d'utilisation. En recherchant sur Google 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 !! et qu'est-ce qui pourrait manquer sur ma machine pour que cela ne fonctionne pas ?

74voto

Jonathan Points 1

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

Essayez ça :

 echo hello
 !!

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

J'imagine que ce qui s'est passé, c'est qu'ils ont essayé d'exécuter une commande et qu'elle a échoué et s'est plainte qu'elle n'était pas installée. Alors ils ont tapé sudo apt-get install !! parce que le nom du paquet était par coïncidence le même que le nom de la commande qu'ils ont essayé d'exécuter. La commande résultante tenterait d'installer un paquetage du même nom que la commande qu'ils venaient d'essayer d'exécuter.

41voto

heemayl Points 85741

!! n'a rien à voir avec apt-get . C'est un mot-clé Shell qui sera étendu à la commande précédente. Cette expansion est faite par Shell avant que la commande courante soit interprétée.

De man bash :

! ! Se référer à la commande précédente. C'est un synonyme pour `!-1'.

Par exemple, si vous exécutez une commande :

echo "foo"

Alors si tu cours :

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'existe pas de paquet autonome nommé fooecho . En dehors du Shell intégré. echo il y a /bin/echo qui fait partie du paquetage GNU-coreutils. Ainsi, vous obtiendrez des erreurs disant que de tels paquets ne sont pas disponibles.

D'un autre côté, 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 constater cowsay est en cours d'installation.

Je vous conseille de ne pas le faire (sauf si vous êtes sûr), être explicite ne fait pas de mal.

16voto

Bilal Points 3399

!! : Se référer à la commande précédente. C'est un synonyme de !-1 (Le source ).

Par exemple, si j'exécute :

./test

puis me rappeler 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.

2voto

Hopping Bunny Points 306

La question a déjà reçu une réponse, je ne serai donc pas répétitif. Cependant, j'aimerais souligner qu'il existe de nombreux raccourcis de ce type dans différents shells qui permettent de répéter/trouver/éditer des commandes. Voici quelques-uns de ceux que j'utilise :

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

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

Cela vous fera atterrir 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 l'a fait suivre de quelques commandes aléatoires comme ls , cd , pwd etc., puis il suffit de taper Ctrl - R suivi par cool va faire apparaître ce vi commandement.

Il suffit de rechercher les raccourcis clavier de bash (ou csh ou autre) et ce sera la meilleure chose que vous ferez aujourd'hui !

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X