Quando si digita un comando che non esiste nel proprio sistema bash esegue la funzione command_not_found_handle()
. In questa funzione c'è una chiamata allo /usr/lib/command-not-found
script che stampa i messaggi.
Ubuntu 12.04
La mia prima risposta alla fonte cambiamento di questo script per stampare messaggi a stdout
posto stderr
, ma quando stavo leggendo fonte di sceneggiatura ho scoperto che è possibile configurarlo per chiedere solo se si desidera installare il pacchetto mancante.
Se esporti una variabile COMMAND_NOT_FOUND_INSTALL_PROMPT
ti verrà chiesto di installare il pacchetto mancante:
pbm@ubuntu:~$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
pbm@ubuntu:~$ export COMMAND_NOT_FOUND_INSTALL_PROMPT=""
pbm@ubuntu:~$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
Do you want to install it? (N/y)y
sudo apt-get install git
[sudo] password for pbm:
Versioni precedenti di Ubuntu
Purtroppo non esiste, COMMAND_NOT_FOUND_INSTALL_PROMPT
quindi posso trovare alcune altre opzioni:
1) Installa il pacchetto dalla 12.04 - non dovrebbe essere il problema - sono solo pochi script in Python, quindi dovrebbe funzionare (non testato!).
2) Passa stderr
a stdout
. Per farlo, modifica il file /usr/lib/python2.7/dist-packages/CommandNotFound/CommandNotFound.py
e stderr
passa stdout
alle righe 237 e 240.
Dopodiché puoi usarlo in questo modo:
pbm@ubuntu:~$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
pbm@ubuntu:~$ `git`
//Installation begins
Se si aggiunge l' -y
opzione al apt-get
comando nelle righe 237 e 240, è possibile utilizzare anche la sintassi !! | sh
.
3) Puoi anche modificare questo script dalla riga 242 in questo modo:
print >> sys.stderr, _("You can install it by typing:")
f = open("%s/.install-missing" % os.path.expanduser('~'),'w')
print >> sys.stderr, "sudo apt-get install %s" % packages[0][0]
print >> f, "sudo apt-get install %s" % packages[0][0]
f.close()
In questo modo otterrai il tuo comando in file ~/.install-missing
, quindi puoi creare un alias:
alias im="chmod +x ~/.install-missing; ~/.install-missing"
Se si chiama im
pacchetto verrà installato.
/usr/lib/command-not-found
ma non ha alcun riferimento aCOMMAND_NOT_FOUND_INSTALL_PROMPT
- pensieri?