Cosa causa la pausa di bash dopo un comando errato?


23

Quando si digita un comando errato, dire che si desidera eseguire:

$ cd ..
$ ls

Ma invece digiti troppo velocemente e finisci per premere invio tra le s, quindi ottieni:

$ cd ..
$ l
sbash: l: command not found...

Questo succede sempre, quando digitiamo velocemente. Ciò di cui sono curioso è la fonte della pausa di 2,5 secondi (sul mio sistema) dopo che il testo del comando errato appare sullo schermo. Mi sembra che riconosca immediatamente il comando errato, stampa un messaggio di errore a riguardo, ma solo per divertimento aspetta 2,5 secondi prima di tornare alla riga di comando. Cosa causa questo? C'è una soluzione per questo? È un piccolo fastidio, ma vorrei liberarmene. :)

Modifica: esecuzione del sistema Fedora 16


Hai dimenticato di menzionare il sistema operativo in cui ti trovi.
Daniel Beck

whoa, non alias da ls a ls? :)
dotjoe,

Risposte:


42

Questo tipo di comportamento è causato da uno strumento frequentemente installato su alcune distribuzioni che si agganciano a bash. Questo hook fa sì che se si tenta di eseguire un comando e il comando non esiste, bash cercherà i file disponibili nei repository configurati e ti dirà quale pacchetto dovresti installare per ottenere quel comando.

Se non sei su un sistema Debian, vorrai guardare i profili dei tuoi file di avvio bash e così via e vedere se qualcosa definisce la funzione chiamata command_not_found_handle. Se viene definita quella funzione bash, verrà chiamata ogni volta che si esegue un comando e non è possibile trovare un programma appropriato nel percorso di ricerca. Se esegui typset | lesse navighi attraverso l'output, vedrai la command_not_found_handle()funzione se è stata definita.

Su Debian / Ubuntu il pacchetto che fornisce questo comportamento non è stato trovato . Se lo elimini, disabiliterai le ricerche che rallentano le cose.

Ecco un esempio

# command-not-found installed
$ time pwgen
The program 'pwgen' is currently not installed.  To run 'pwgen' please ask your administrator to install the package 'pwgen'
pwgen: command not found

real    0m0.074s
user    0m0.032s
sys     0m0.040s

# purge command-not-found and restart bash
$ time pwgen
-bash: pwgen: command not found

real    0m0.002s
user    0m0.000s
sys     0m0.000s

L'ora esatta sarebbe ovviamente diversa per te. Ho eseguito i test su un server piuttosto robusto.


10
Nel mio caso in fedora, si è rivelato essere un pacchetto chiamato: PackageKit-command-not-found
Fuu,

6

Parte della domanda era "c'è un modo per risolvere questo problema (in Fedora)?" C'è: in fondo al tuo file .bashrc aggiungi il comando

unset command_not_found_handle

Probabilmente vuoi farlo alla fine del tuo .bashrc (o vicino ad esso) perché potresti eseguire / etc / bashrc o altri script bash nella parte superiore del tuo .bashrc.


5

Su fedora, questo comportamento può essere controllato modificando il /etc/PackageKit/CommandNotFound.conffile di configurazione.

L'impostazione SoftwareSourceSearch=falseeliminerà il ritardo poiché non tenterà di individuare un pacchetto con il comando mancante utilizzando Gestione pacchetti.

Puoi anche cambiare il tempo che attende per la ricerca di un pacchetto, invece modificando l' MaxSearchTime=2000opzione per indicare il numero di millisecondi che sei disposto ad attendere per la ricerca del pacchetto per restituire una corrispondenza. Trovo che il valore predefinito di 2 secondi non sia abbastanza lungo per restituire eventuali corrispondenze e provoca solo un ritardo indesiderato quando si ha un errore di battitura.

Aumentare il valore MaxSearchTimeper fornire un output utile o disabilitare SoftwareSourceSearchper eliminare del tutto il ritardo.

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.