Comment effacer involontairement un fichier source…

Publié par cpb
Juin 26 2012

Comment se tirer une balle dans le piedAvec Bash, la complétion des commandes, noms de fichiers, etc. grâce à la touche « tabulation » est très pratique et je l’utilise en permanence. En pratique mon auriculaire gauche y trouve presque sa position de repos naturel lorsque je travaille en ligne de commande. C’est aussi un moyen très efficace de perdre des fichiers involontairement. Voici ce qui vient de m’arriver.

Je veux vérifier un point de détail pour un cours. Je vais écrire un petit programme d’exemple. Je me crée un répertoire temporaire de travail.

[~]$ mkdir tmp
[~]$ cd tmp/
[tmp]$

J’édite alors mon fichier source. J’utilise généralement vi lorsqu’il s’agit d’un petit programme de quelques lignes.

[tmp]$ vi essai.c
[tmp]$

Puis je veux compiler mon programme en nommant l’exécutable essai.

[tmp]$ gcc -Wall essai.c -o ess
essai.c: In function ‘main’:
essai.c:21:47: erreur: ‘i’ undeclared (first use in this function)
essai.c:21:47: note: each undeclared identifier is reported only once for each function it appears in
[tmp]$

Ah ! J’ai tapé un peu vite sur la touche « Entrée » et j’ai nommé l’exécutable ess au lieu de essai.

C’est alors que voulant effacer ce fichier exécutable au nom erroné (avant de regarder l’erreur de compilation) je tape successivement

[tmp] rm es<tabulation><Entrée>

persuadé que le shell allait compléter la ligne ainsi

[tmp] rm essai

Mais ce que j’aperçois sur la ligne de commande est bien différent, et se confirme lorsque je vérifier le contenu du mon répertoire.

[tmp] ls 
[tmp]

Explication

Lors de la compilation, une erreur s’est produite (une variable non déclarée). Aussi le compilateur n’a-t-il créé aucun fichier exécutable. Et mon appui sur la touche Tabulation a complété la ligne avec le nom du seul fichier présent dans le répertoire : essai.c.

Conclusion

Ce n’est pas la première fois que l’association rm et « Tabulation » me joue un mauvais tour. Il me semblait avoir écrit un billet sur une autre mésaventure de ce genre, mais je ne le retrouve pas. Je l’ajouterai prochainement.

3 Réponses

  1. Michel dit :

    Cette mésaventure m’est arrivée plusieurs fois. Pour des petits programmes d’exemples ou de test. Depuis je n’utilise plus directement gcc. Comme à chaque fois c’est des fichiers nom.c ou nom.cpp qui deviennent « nom », j’utilise directement la commande :

    make nom

    Sans avoir eu besoin de créer de makefile et en ayant pris soin de toujours avoir la variables d’environnement CFLAGS définie (dans mon ~/.profile). C’est plus court et moins sujet aux erreurs, je trouve.

  2. Fabien dit :

    Un alias avec confirmation de suppression aurait certainement été utile ici 😉

URL de trackback pour cette page