Je sais comment *
est interprété dans des commandes comme ls
par exemple. Mais lorsque vous essayez d'exécuter *
en tant que commande, le shell essaie d'exécuter le premier fichier ou répertoire de votre répertoire de travail. Pourquoi est-ce? Comment le shell comprend-il *
?
Réponse acceptée :
Contrairement à certains autres systèmes d'exploitation, sous Unix, c'est le shell qui développe les caractères génériques des noms de fichiers. Il développe d'abord les expansions de paramètres et les globs, puis utilise le premier mot (maintenant) comme nom de la commande à exécuter.
C'est aussi pourquoi les fichiers nommés avec un tiret au début peuvent être gênants :un glob comme *
s'étendra aux noms de fichiers, et un nom commençant par un tiret peut être pris en option. (L'exemple effrayant étant qu'un fichier appelé -r
dans le répertoire de travail ferait rm *
supprimer tout récursivement…)
Habituellement, on n'utiliserait pas *
comme le premier élément sur n'importe quelle ligne de commande, donc avoir le premier fichier déterminer la commande à exécuter dans ce cas ne causera probablement pas de problèmes.