Wenn Sie einen Befehl eingeben, der in Ihrem System nicht vorhanden ist, führt bash die Funktion aus command_not_found_handle()
. In dieser Funktion wird ein /usr/lib/command-not-found
Skript aufgerufen, das Nachrichten druckt.
Ubuntu 12.04
Meine erste Vermutung, die Quelle dieses Skripts zu ändern, um stdout
stattdessen Nachrichten zu drucken stderr
, aber als ich die Quelle des Skripts las, stellte ich fest, dass Sie es so konfigurieren können, dass Sie nur gefragt werden, ob Sie das fehlende Paket installieren möchten.
Wenn Sie eine Variable exportieren, werden COMMAND_NOT_FOUND_INSTALL_PROMPT
Sie aufgefordert, das fehlende Paket zu installieren:
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:
Ältere Versionen von Ubuntu
Leider gibt es keine, COMMAND_NOT_FOUND_INSTALL_PROMPT
so dass ich einige andere Optionen finden kann:
1) Installieren Sie das Paket ab 12.04 - es sollte nicht das Problem sein - es sind nur wenige Skripte in Python, also sollte es funktionieren (ungetestet!).
2) Wechseln Sie stderr
zu stdout
. Um es zu tun bearbeitet Datei /usr/lib/python2.7/dist-packages/CommandNotFound/CommandNotFound.py
und ändern stderr
zu stdout
in den Zeilen 237 und 240.
Danach können Sie es folgendermaßen verwenden:
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
Wenn Sie -y
dem apt-get
Befehl in den Zeilen 237 und 240 eine Option hinzufügen , können Sie auch die Syntax verwenden !! | sh
.
3) Sie können dieses Skript auch in Zeile 242 folgendermaßen ändern:
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()
Auf diese Weise erhalten Sie Ihren Befehl in einer Datei ~/.install-missing
, sodass Sie einen Alias erstellen können:
alias im="chmod +x ~/.install-missing; ~/.install-missing"
Wenn Sie im
Paket anrufen , wird installiert.
/usr/lib/command-not-found
aber keinen Bezug zuCOMMAND_NOT_FOUND_INSTALL_PROMPT
- Gedanken?