24 votes

Qu'est-ce qui provoque la pause de bash après une mauvaise commande ?

Lorsque vous tapez une mauvaise commande, dites ce que vous voulez faire :

$ cd ..
$ ls

Mais au lieu de ça, tu tapes trop vite et tu finis par appuyer sur la touche entrée entre le l et le s, ce qui donne.. :

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

Cela arrive tout le temps, bien sûr, quand on tape vite. Ce qui m'intrigue, c'est l'origine de la pause de 2,5 secondes (sur mon système) après l'apparition du texte de la mauvaise commande à l'écran. Il me semble qu'il reconnaît la mauvaise commande instantanément, affiche un message d'erreur à ce sujet, mais ensuite, juste pour le plaisir, il attend 2,5 secondes avant de me renvoyer à la ligne de commande. Quelle est la cause de ce phénomène ? Existe-t-il un moyen de résoudre ce problème ? C'est une petite gêne, mais j'aimerais m'en débarrasser :)

Edit : Exécution du système Fedora 16

0 votes

Vous avez oublié de préciser votre système d'exploitation.

0 votes

Whoa, vous n'aliaser pas l en ls ? :)

43voto

Alex Points 962

Ce type de comportement est causé par un outil fréquemment installé sur certaines distributions qui s'accrochent à bash. Ce hook fait en sorte que si vous essayez d'exécuter une commande, et que cette commande n'existe pas, alors bash cherchera les fichiers disponibles dans les dépôts configurés, et vous dira quel paquet vous devrez installer pour obtenir cette commande.

Si vous n'êtes pas sur un systÃ?me Debian, vous devez regarder vos fichiers de démarrage bash, vos profils, etc. et voir si quelque chose définit la fonction nommée command_not_found_handle . Si cette fonction bash est définie, elle sera appelée chaque fois que vous lancerez une commande et qu'un programme approprié ne sera pas trouvé dans votre chemin de recherche. Si vous exécutez typset | less et parcourir la sortie, vous verrez la command_not_found_handle() si elle a été définie.

Sur Debian/Ubuntu le paquet qui fournit ce comportement est commande non trouvée . Si vous le purgez, vous désactivez les recherches, ce qui ralentit les choses.

Voici un exemple

# 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'heure exacte sera bien sûr différente pour vous. J'ai effectué mes tests sur un serveur assez puissant.

10 votes

Dans mon cas, sous fedora, il s'agissait d'un paquet appelé : PackageKit-command-not-found

6voto

Scott C Wilson Points 2300

Une partie de la question était "existe-t-il un moyen de corriger cela (dans Fedora) ?". Il y en a un : au bas de votre fichier .bashrc, ajoutez la commande suivante

unset command_not_found_handle

Vous voulez probablement le faire à la fin de votre .bashrc (ou à proximité) parce que vous pourriez exécuter /etc/bashrc ou d'autres scripts en haut de votre .bashrc.

5voto

Aner Points 281

Sur fedora, ce comportement peut être contrôlé en modifiant le paramètre /etc/PackageKit/CommandNotFound.conf le fichier de configuration.

Réglage de SoftwareSourceSearch=false éliminera le délai puisqu'il n'essaiera pas de localiser un paquet avec la commande manquante en utilisant le gestionnaire de paquets.

Vous pouvez également modifier le temps d'attente pour la recherche d'un paquet en changeant l'attribut MaxSearchTime=2000 pour indiquer le nombre de millisecondes que vous êtes prêt à attendre que la recherche de paquets renvoie une correspondance. Je trouve que la valeur par défaut de 2 secondes n'est pas assez longue pour renvoyer des résultats et provoque simplement un délai indésirable en cas de faute de frappe.

Soit vous augmentez le MaxSearchTime pour fournir une sortie utile ou désactiver SoftwareSourceSearch pour éliminer complètement le retard.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X