Lorsque vous tapez une commande qui n'existe pas dans votre système, bash s'exécute une fonction command_not_found_handle(). Dans cette fonction, il existe un appel à un /usr/lib/command-not-foundscript qui imprime des messages.
Ubuntu 12.04
Ma première supposition pour changer la source de ce script pour imprimer des messages à la stdoutplace stderr, mais quand je lisais la source du script, j'ai trouvé que vous pouvez le configurer pour simplement vous demander si vous souhaitez installer le paquet manquant.
Si vous exportez une variable, il COMMAND_NOT_FOUND_INSTALL_PROMPTvous sera demandé d'installer le package manquant:
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:
Versions antérieures d'Ubuntu
Malheureusement, il n'y en a pas COMMAND_NOT_FOUND_INSTALL_PROMPT, je peux donc trouver quelques autres options:
1) Installez le package à partir de 12.04 - cela ne devrait pas être le problème - ce ne sont que quelques scripts en Python donc cela devrait fonctionner (non testé!).
2) Passez stderrà stdout. Pour ce faire, modifiez le fichier /usr/lib/python2.7/dist-packages/CommandNotFound/CommandNotFound.pyet passez stderraux stdoutlignes 237 et 240.
Après cela, vous pouvez l'utiliser de cette façon:
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
Si vous ajoutez une -yoption à la apt-getcommande aux lignes 237 et 240, vous pouvez également utiliser la syntaxe !! | sh.
3) Vous pouvez également modifier ce script à partir de la ligne 242 de cette manière:
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()
De cette façon, vous obtiendrez votre commande dans un fichier ~/.install-missing, vous pouvez donc créer un alias:
alias im="chmod +x ~/.install-missing; ~/.install-missing"
Si vous appelez le impackage sera installé.
/usr/lib/command-not-foundmais n'a aucune référence àCOMMAND_NOT_FOUND_INSTALL_PROMPT- des pensées?