bash: grep : commande introuvable
- Publié le 30 Septembre 2006 à 23:06
- 6 commentaires - 0 trackback
Voila plusieurs fois que je vois passer cette erreur comme par exemple aujourd'hui sur la liste de diffusion Ubuntu-fr (tient ce message n'apparaît pas dans les archives officielles de septembre ?). J'ai moi même eu ce problème lorsque j'ai commencé à utiliser Ubuntu Hoary, voila ce qui peut se produire sur un exemple tout simple :
> tigrou@Lorien[192.168.0.243]:~$ ls ~/Desktop | grep 'JPG' bash: grep : commande introuvable
L'utilitaire grep introuvable sur un système Linux ? c'est probablement possible mais après vérification il est bien installé et fonctionne correctement sur d'autres exemples, alors d'où vient le problème ?
Le problème se situe en fait lors de la frappe de la commande. En effet, pour taper un pipe (|) il faut presser simultanément AltGr et le chiffre 6 sur le haut du clavier et lorsque l'on tappe un peu rapidement il arrive fréquement que le caractère espace suivant soit frappé alors que la touche AltGr est encore enfoncée. Or, avec le clavier fr-latin9 (dont une révision est en discussion) cette combinaison produit un caractère non-ASCII qui est une espace insécable (espace est féminin lorsqu'on parle d'un caractère) que le shell ne reconnait pas malgré le fait que son apparence soit la même dans un terminal. D'ailleurs il faut remarquer que dans le message d'erreur du shell, il y a visiblement deux espaces avant grep. Le message est en fait "bash: <espace insécable>grep : commande introuvable".
Le fait que le clavier permette de taper des caractères spéciaux permettant de respecter la typographie de la langue française me paraît plutôt une bonne chose. Ici le problème est plus la combinaison malheureuse ajoutée au fait que visuellement il n'y ait pas de différence entre l'espace et l'espace insécable. Comme souvent sous Linux, il est possible de changer ce comportement à l'aide de xmodmap. Pour cela il suffit de créer un fichier .Xmodmap dans votre répertoire utilisateur (attention à la casse sinon le fichier ne sera pas chargé automatiquement) avec le contenu suivant :
keycode 65 = space space space space space
Ce fichier indique que la touche dont le code est 65 (la barre d'espace) associée à n'importe quelle touche modifier (shift, control, alt, ...) produit une espace simple. Je n'ai pas l'utilité de taper des espaces insécables mais du coup avec cette technique il est possible d'assigner n'importe quelle combinaison de touche à un caractère particulier. Par exemple si on souhaite pouvoir insérer des espaces insécables à l'aide de Shift+Espace (combinaison plus difficile à taper par erreur ou enchaînement rapide) on peut mettre dans ce fichier :
keycode 65 = space nobreakspace space space space
