J'étais en train de déconner dans le terminal sous Red Hat Linux, et quand j'ai tapé l'astérisque (*
) suivi de return, il a exécuté l'un des programmes de mon répertoire. Pourquoi?
Ma meilleure hypothèse est qu'Unix l'a traité comme un caractère générique, de sorte qu'il a exécuté le premier programme alphabétique. Puisque my_program.exe
et one_of_my_programs.program
peuvent être exécutés en tapant simplement le nom du fichier, l'opérateur générique représente tous les fichiers possibles. Comme un programme est d'abord alphabétique, Unix l'exécute. Est-ce un bon jugement?
Votre interprétation est correcte. Le reste des fichiers sera présenté comme sa liste de paramètres.
Notez qu'il ne le fera que si le programme a le bit exécutable défini et que le répertoire en cours est dans la liste PATH
.
Quelques notes qui peuvent aider à comprendre: -
./*
, l'entrée PATH
n'est pas obligatoire.. *
ou . ./*
et que le premier fichier correspondant est un script, il n'a pas besoin d'être exécutable ni le répertoire en cours dans PATH
(peut ne pas être vrai pour les shells autres que bash
).Cela suggère que .
fait partie de votre variable PATH
. C'est une très mauvaise idée pour des raisons de sécurité (bien entendu, Windows devait en faire un paramètre par défaut non modifiable).
Cependant, cette "suggestion" n’est que modérément valide: si vous avez un fichier nommé rm
dans votre répertoire actuel, *
exécutera correctement le défaut rm
:
/tmp$ mkdir ohno
/tmp$ cd ohno
/tmp/ohno$
/tmp/ohno$ ls
/tmp/ohno$ touch rm what
/tmp/ohno$ ls
rm what
/tmp/ohno$ *
/tmp/ohno$ ls
rm
/tmp/ohno$
Comme vous pouvez le constater, ce n'est pas rm
dans le répertoire actuel (fichier vide et non exécutable) qui a été exécuté, mais plutôt le /bin/rm
par défaut du système.
Vérifiez toujours vos commandes lorsque des caractères génériques sont impliqués. Voici l'un des messages les plus terrifiants à lire:
rm: cannot remove '.o': No such file or directory
Ceci est le résultat de l'appel
rm * .o
, plus ou moins le pire emplacement d’un espace parasite que l’on puisse trouver.