Bonsoir à tous,
Le rm \-L ne fonctionnera pas, car le \ sert à échapper un caractère que le shell peut interpréter. Or le - n'est pas un caractère interprétable du shell.
Le rm "-L" ne fonctionnera pas, et pour les mêmes raisons.
Par contre, on peut en effet utiliser la notation ./-L qui, comme l'a dit le Père Noël, fait "comprendre au shell que l'on désigne un fichier", ce qui en soit n'est pas tout à fait vrai (je m'explique juste après).
La raison à tout cela est que le 'rm', comme une majorité d'autres programmes GNU, utilisent la fonction getopt pour "parser" (parcourir) leurs paramètres. Or, la fonction getopt permet de reconnaître n'importe quel argument commençant par un '-' passé à la commande, comme étant un paramètre de la commande (la nuance entre argument et paramètre prend ici tout son sens).
Donc la plupart des commandes GNU auront des difficultés pour manipuler des fichiers (ou tout autre type d'argument) dont le nom commence par un tiret, tout simplement car le getopt les interprétera comme des options de la commande.
Pour en revenir au ./-L, cela ne dit pas vraiment au shell d'interpréter le -L comme un fichier. Cela fait tout simplement que le getopt ne reconnaît pas cet argument comme un paramètre (car le tiret n'est pas en première position).
Dans \-L, le tiret, même s'il est échappé, est bien le premier caractère de l'argument. Donc, pour getopt \-L est identique à -L, et c'est un paramètre qu'il renvoie à la commande.
Idem pour "-L" ou les guillemets indiquent seulement au shell de ne pas interpréter les caractères spéciaux contenus dans l'argument. Le getopt, pour sa part, voit un argument -L.
Pour terminer cette (brillante ?) démonstration, il faut savoir que la fonction getopt interprète un paramètre particulier dans toute ligne de commande. Il s'agit du paramètre --, cité par Frédéric. Ce paramètre n'est interprété que par le getopt lui-même, et n'est pas transmis à la commande qui appelle getopt.
Ce paramètre signifie pour getopt qu'il n'attend plus aucun paramètre sur la ligne de commande, donc tous les arguments suivants qui commencent par un tiret sont tout simplement considérés comme des arguments simples.
Désolé de vous avoir ennuyé pour certains, qui n'auront peut-être pas eu le courage de lire jusqu'ici.
Pour les autres, je ne cherche pas à étaler ma science. Je suis tout juste content de pouvoir partager ce que j'ai pu apprendre à ce sujet. J'ai en effet connu le même problème il y a quelques jours. Et j'ai pu apprendre tout ça en fouillant un peu (le man entre autres).
Bonne soirée
@+
Oliwood
Poste le Wednesday 12 October 2005 23:36:31