Che cosa fa "apt-get install !!" e come farlo funzionare?

54

Ho visto qualcuno che digita

apt-get install !!

L'ha fatto alcune volte e ogni volta, è stato installato un programma diverso. Sembra che abbia automaticamente capito cosa è necessario dopo.

Tuttavia, quando l'ho provato sulla mia macchina virtuale LTS Ubuntu 14.04.1, ho appena mostrato alcune istruzioni per l'uso. Googling per apt-get install !! non sembra funzionare molto bene. Molti risultati di ricerca non contengono il doppio punto esclamativo.

Che cosa fa apt-get install !! e cosa potrebbe mancare sul mio computer se non funzionasse?

    
posta Thomas Weller 24.05.2015 - 21:11

5 risposte

74

!! è un collegamento in bash che significa l'ultimo comando eseguito.

Prova questo:

 echo hello
 !!

In questo contesto, !! verrà espanso a un altro echo hello .

Immagino che cosa è successo è che hanno cercato di eseguire un comando e non è riuscito e si è lamentato che non è stato installato. Quindi hanno digitato sudo apt-get install !! perché il nome del pacchetto era coincidente con il nome del comando che hanno tentato di eseguire. Il comando risultante tenterebbe di installare un pacchetto con lo stesso nome del comando che avevano appena tentato di eseguire.

    
risposta data Stephen 24.05.2015 - 21:12
41

!! non ha nulla a che fare con apt-get . È una parola chiave shell che verrà espansa al comando precedente. Questa espansione viene eseguita dalla shell prima che il comando corrente venga interpretato.

Da man bash :

  

!! Fare riferimento al comando precedente. Questo è un sinonimo   per "! -1".

Ad esempio, se esegui un comando:

echo "foo"

Quindi se esegui:

sudo apt-get install !!

sarà esteso a:

sudo apt-get install echo foo

Come puoi vedere, è espanso in due pacchetti, vale a dire echo e l'altro è foo . Non esiste un pacchetto autonomo denominato foo e echo . A parte la shell incorporata echo , esiste l'eseguibile /bin/echo che fa parte del pacchetto GNU-coreutils. Quindi, riceverai errori dicendo che nessun pacchetto di questo tipo è disponibile.

D'altra parte l'altra persona potrebbe fare qualcosa del genere:

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

Come puoi vedere cowsay è in fase di installazione.

Ti suggerisco di non farlo (se non sei sicuro), essere espliciti non nuoce.

    
risposta data heemayl 24.05.2015 - 21:27
16

!! : fare riferimento al comando precedente. Questo è un sinonimo di !-1 (The fonte ).

Ad esempio, se eseguo:

./test

quindi ricorda che ho bisogno di essere root, quindi potrei semplicemente digitare:

sudo !!

equivale a digitare:

sudo ./test

È utile quando il tuo ultimo comando contiene molti caratteri.

    
risposta data Bilal 24.05.2015 - 21:17
2

Alla domanda è già stata data una risposta, quindi non sarò ripetitivo. Tuttavia, vorrei sottolineare che ci sono numerose scorciatoie di questo tipo in varie shell che aiutano a ripetere / trovare / modificare comandi. Alcuni di quelli che uso sono:

  1. !$ seguito da ENTER digiterà l'ultima parola dell'ultimo comando. Ad esempio,

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

Questo ti atterrerà in /let/me/in

  1. Ctrl - R e quindi digita alcune parole da un comando precedente. Ad esempio, se hai digitato vi /home/mycoolproject.sh e lo hai seguito con alcuni comandi casuali come ls , cd , pwd , ecc. Quindi semplicemente digitando Ctrl - R seguito da cool verrà visualizzato il comando vi .

Cerca solo scorciatoie da tastiera bash (o csh o qualsiasi altra cosa) e sarà la cosa migliore che hai fatto oggi!

    
risposta data Hopping Bunny 29.05.2015 - 06:32
-2

Come descritto è il comando precedente, ma è meglio non usarlo come una mano corta sciatta. Essere più diretti è semplice e sicuro.

$ 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
    
risposta data Christopher Shaw 27.05.2015 - 12:35

Leggi altre domande sui tag