Bitten Sie um die Installation des Programms nach "Das Programm 'x' ist derzeit nicht installiert"

18

Wenn Sie versuchen, ein nicht installiertes Programm auszuführen, erhalten Sie eine Meldung

The program 'x' is currently not installed. You can install it by typing: 
sudo apt-get install x

und anstatt Ihnen anzubieten, das Programm für Sie zu installieren, müssen Sie den tatsächlichen Befehl eingeben. Wie kann dieses Verhalten geändert werden?

Gerhard Burger
quelle

Antworten:

17

Das Paket, das für dieses Verhalten verantwortlich ist, ist das nicht gefundene BefehlspaketInstallieren Sie command-not-found und enthält bereits das gewünschte Verhalten, obwohl es standardmäßig deaktiviert ist. Sie können es aktivieren, indem Sie die folgende Zeile zu Ihrer hinzufügen~/.bashrc

export COMMAND_NOT_FOUND_INSTALL_PROMPT=1

Jetzt ändert sich das Verhalten zu

The program 'x' is currently not installed. You can install it by typing:
sudo apt-get install x
Do you want to install it? (N/y)

Hinweis: Wenn Sie eine Meldung erhalten, dass Python (speziell AttributeError: 'str' object has no attribute 'decode') abstürzt, ist dies der Fehler 1073919 . Für Raring und Saucy ist bereits ein Fix verfügbar. Alternativ (nur für fortgeschrittene Benutzer ) können Sie die Datei /usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.pyändern. Die Zeilen, die geändert werden müssen, finden Sie im Diff im Bugreport.

Edit: Das Update ist nun in der Version 0.3ubuntu7.1 in Raring (SRU) und für 0.3ubuntu8 in Saucy freigegeben.

Gerhard Burger
quelle
1

Meine Lösung ist eine Mischung aus Sicherheit und Komfort:

auto-apt überprüft den Dateizugriff von Programmen, die in ihren Umgebungen ausgeführt werden, und wenn ein Programm versucht, auf eine Datei zuzugreifen, von der bekannt ist, dass sie zu einem deinstallierten Paket gehört, installiert auto-apt dieses Paket mit apt-get. Für diese Funktion sind apt und sudo erforderlich. Es bietet auch eine einfache Datenbank zum Suchen, welches Paket eine angeforderte Datei enthält.

Es ist ein Terminal-Emulator, in dem Sie eine Umgebung betreten, in der jeder Dateizugriff zuvor von auto-apt überprüft wird. Wenn er nicht vorhanden ist, durchsucht er die Datenbank (a la apt-file) und lädt das gewünschte Paket herunter und installiert es. Anschließend kann das Programm fortgesetzt werden . Sie sollten es als root ausführen:

sudo auto-apt

Dies ist in Fällen nützlich, in denen Sie ein Paket erstellen und nicht in der Stimmung sind, vor dem Bildschirm nach jedem Konfigurationsfehler für fehlende Header usw. zu suchen.

Dies kann auch als Ersatz für apt-get + apt-file verwendet werden, wo Sie Programme installieren können, die nur die commandAusführung anweisen.

Sie müssen verstehen, dass Sie es nicht geöffnet lassen sollten, wenn Ihr System nicht aussieht, da es fast so ist, als ob Sie den Root-Benutzer verwenden würden.

Manpage: http://derpi.tuwien.ac.at/cgi-bin/man/man2html?1+auto-apt

Braiam
quelle
0

Eine automatische Installation wäre eine schlechte Idee. Wenn Sie eine Eingabe speichern möchten, können Sie verwenden

sudo apt-get install !!

wo !!wird durch den letzten Befehl aus der Geschichte ersetzt. Sie könnten dies wahrscheinlich auch zu einem Alias ​​machen, aber ich weiß nicht, wie ich es hinzufügen soll, !!ohne es zu bewerten.

Es gibt jedoch einige Vorbehalte, wie von @ eliah-kagan und @gertvdijk in den Kommentaren erwähnt. Einige Programme haben nicht den gleichen Paketnamen wie die auszuführende Binärdatei. Wenn Sie Argumente an die Binärdatei übergeben, kann dies zu unerwarteten Ergebnissen führen.

l3dx
quelle
Klar, ich weiß, dass mein Vorschlag keine großartige Lösung ist, aber er könnte "gut genug" funktionieren, je nach den Bedürfnissen der Benutzer.
13.
5
Befehlsnamen (Dateiname der Binärdatei auf dem System) müssen nicht mit dem Namen des Pakets identisch sein.
Gertvdijk
3
l3dx: Obwohl ich immer noch meine Bedenken habe (einschließlich des Hinweises von @ gertvdijk, dass Paket- und Befehlsnamen oft unterschiedlich sind, sowie Bedenken hinsichtlich möglicherweise sehr schwerwiegender Auswirkungen zusätzlicher Befehlszeilenargumente, die an den ursprünglichen Befehl übergeben wurden), scheint es, als wären Sie auf etwas gestoßen . Nach einigem Testen scheint dies in der Praxis besser zu funktionieren als (ich denke) in der Theorie. Ich empfehle immer noch, diese Antwort zu erweitern, um Klarheit zu schaffen, zu warnen und vielleicht um andere Optionen zu erläutern. Auf jeden Fall hatte ich dies abgelehnt, aber meine Ablehnung entfernt.
Eliah Kagan
0

Es gibt einige Methoden, um das vorgeschlagene Paket schnell zu installieren:

  • Füge export COMMAND_NOT_FOUND_INSTALL_PROMPT=1irgendwo hinzu wie~/.bashrc

    Dies ist der "coolste" Weg, obwohl er offensichtlich nicht ganz so sicher ist, aber wahrscheinlich wird in 90% der Fälle ein internes "Danke, genau das wollte ich von dir!" Antwort.

    (Ein persönlicher Nachteil dieser Methode ist, dass ich die Antwort anscheinend schwer zu merken / zu suchen finde, weshalb ich sie bisher eher nicht verwendet habe.)

  • Wenn Sie das Standardterminal verwenden, können Sie die Zeile schnell auswählen und mit der mittleren Maustaste darauf klicken, um sie direkt in die Befehlszeile einzufügen. (Andere Terminals oder SSH-Apps haben möglicherweise andere Methoden.)

    In der Praxis finde ich das in der Regel schnell genug und etwas schwieriger, "versehentlich" und ohne vorherige Einrichtung, dass ich das eher mache.

  • Es gibt jedoch etwas zu sagen - wenn Sie schnell tippen können (oder wollen) -, um sudo apt install packagenamedirekt zu tippen .

    Es hilft Ihnen beim Trainieren Ihres Muskelgedächtnisses und bedeutet auch, dass Sie den Paketnamen lesen und eingeben müssen, was bedeutet, dass Sie sich in Zukunft leichter daran erinnern können. Es ist auch in neueren Ubuntu-Versionen etwas einfacher, weil es aptanstelle von funktioniert apt-get.

mwfearnley
quelle
1
Du meintest wahrscheinlich ~/.bashrcstatt ~/.bash_rc.
Edwinksl
Danke, ich habe wahrscheinlich darüber nachgedacht .bash_profile.
Mwfearnley