Chiedere di installare il programma dopo "Il programma 'x' non è attualmente installato"


18

Se si tenta di eseguire un programma non installato, verrà visualizzato un messaggio

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

e invece di offrirti di installare il programma per te, devi digitare il comando effettivo. Come può essere cambiato questo comportamento?

Risposte:


17

Il pacchetto responsabile di questo comportamento è il pacchetto comando non trovatoInstalla comando non trovato e include già il comportamento desiderato sebbene sia disabilitato per impostazione predefinita. Puoi abilitarlo aggiungendo la seguente riga alla tua~/.bashrc

export COMMAND_NOT_FOUND_INSTALL_PROMPT=1

Ora il comportamento è cambiato in

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)

Nota: se viene visualizzato un messaggio sull'arresto anomalo di Python (in particolare AttributeError: 'str' object has no attribute 'decode'), si tratta del bug 1073919 . Una correzione è già disponibile per Raring e Saucy. In alternativa ( solo utenti esperti ), è possibile modificare il file /usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py, vedere il diff allegato al report bug per le righe che devono essere modificate.

Modifica: la correzione è ora rilasciata nella versione 0.3ubuntu7.1 in Raring (SRU) e per 0.3ubuntu8 in Saucy.


1

La mia soluzione è un ibrido tra sicurezza e comodità:

auto-apt controlla l'accesso ai file dei programmi in esecuzione nei suoi ambienti e se un programma tenta di accedere a un file noto per appartenere a un pacchetto disinstallato, auto-apt installerà quel pacchetto usando apt-get. Questa funzione richiede apt e sudo per funzionare. Fornisce inoltre un database semplice per cercare quale pacchetto contiene un file richiesto.

Si tratta di un emulatore di terminale in cui si accede a un ambiente in cui ogni accesso ai file viene verificato manualmente da auto-apt e, se non esiste, cerca nel database (a la apt-file) e scarica e installa il pacchetto desiderato, quindi consente al programma di continuare . Dovresti eseguirlo come root:

sudo auto-apt

Questo è utile nei casi in cui stai costruendo un pacchetto e non è dell'umore giusto per essere davanti allo schermo alla ricerca di ogni errore di configurazione per le intestazioni mancanti, ecc.

Questo può anche essere usato come sostituzione apt-get + apt-file dove è possibile installare i programmi dicendo semplicemente commanddi eseguirlo.

Devi capire che non dovresti lasciarlo aperto quando il tuo sistema non viene guardato, dato che è quasi come se stessi usando l'utente root.

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


0

L'installazione automatica sarebbe una cattiva idea. Se vuoi salvare qualche digitazione puoi usare

sudo apt-get install !!

dove !!sarà sostituito dall'ultimo comando della storia. Probabilmente potresti anche rendere questo un alias, ma non so come aggiungere !!senza valutarlo.

Ci sono alcuni avvertimenti, come menzionato da @ eliah-kagan e @gertvdijk nei commenti. Alcuni programmi non hanno lo stesso nome di pacchetto del file binario che eseguiresti. Inoltre, quando si passano argomenti al file binario, ciò potrebbe comportare alcuni risultati imprevisti.


Certo, so che il mio suggerimento non è un'ottima soluzione, ma potrebbe funzionare "abbastanza bene" in base alle esigenze degli utenti.
l3dx,

5
I nomi dei comandi (nome file del file binario sul sistema) non sono necessariamente gli stessi del nome del pacchetto.
gertvdijk,

3
l3dx: Anche se ho ancora i miei dubbi (incluso il punto di @gertvdijk secondo cui i nomi dei pacchetti e dei comandi sono spesso diversi, così come le preoccupazioni sugli effetti forse molto cattivi di argomenti della riga di comando aggiuntivi passati al comando originale), sembra che tu sia su qualcosa . Dopo un po 'di prove, sembra che funzioni meglio in pratica di (penso) funziona in teoria. Consiglio ancora di espandere questa risposta per chiarimenti, avvertenze e forse per dettagliare altre opzioni. In ogni caso, avevo annullato il voto, ma ho rimosso il mio voto negativo.
Eliah Kagan,

0

Esistono alcuni metodi per installare rapidamente il pacchetto suggerito:

  • Aggiungi export COMMAND_NOT_FOUND_INSTALL_PROMPT=1in un posto come~/.bashrc

    questo è il modo "più bello", anche se ovviamente non altrettanto sicuro, ma probabilmente il 90% delle volte susciterà un interno "Grazie, è esattamente quello che volevo che facessi!" risposta.

    (Uno svantaggio personale di questo metodo è che mi sembra di trovare la risposta difficile da ricordare / cercare, quindi tendo a non averla usata finora.)

  • Se si utilizza il Terminale predefinito, è possibile selezionare rapidamente la riga e fare clic con il pulsante centrale per incollarlo direttamente nella riga di comando. (Altri terminali o app SSH possono avere metodi diversi.)

    In pratica, tendo a trovarlo abbastanza veloce, e leggermente più difficile da fare "per caso", e senza richiedere alcuna configurazione precedente, che invece tendo a fare.

  • C'è qualcosa da dire, però - se puoi (o vuoi imparare a) scrivere velocemente - per scrivere sudo apt install packagenamedirettamente.

    Ti aiuta a esercitare la memoria muscolare e significa anche che devi leggere e digitare il nome del pacchetto, il che significa che probabilmente lo ricorderai più facilmente in futuro. È anche leggermente più semplice nelle versioni più recenti di Ubuntu, perché aptfunziona al posto di apt-get.


1
Probabilmente intendevi ~/.bashrcinvece di ~/.bash_rc.
edwinksl,

Grazie, probabilmente stavo pensando .bash_profile.
mwfearnley,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.