2010-07-26 10 views
2

Est-ce que quelqu'un sait pourquoi le script suivant fonctionne? Le shell exécute la commande echo et émet la sortie HI. Je pensais que puisqu'il n'y a pas de "!" après le "#", le shell donnerait une erreur.Linux shell situation étrange

Répondre

12

S'il n'y a pas de #! en spécifiant un interpréteur spécifique, le noyau ne l'interceptera pas et ne le lancera pas avec le programme spécifié. Cependant, le shell actuel peut toujours l'interpréter comme un fichier de commande, ce que vous voyez se produire.

+6

Ceci est correct. La raison pour laquelle le script fonctionne toujours est que "#" est le caractère de commentaire dans Bash/SH/ZSH/etc, donc la première ligne est ignorée comme un commentaire. – Borealid

+0

Merci pour la réponse complète! – yassin

1

Lorsque le shell est invité à exécuter un fichier avec le bit exécutable activé, il examine le fichier et détermine s'il commence par un # shebang! Si c'est le cas, il exécutera cette commande qui récupérera le texte du programme à partir du reste du fichier.

Si le fichier ne démarre pas avec un shebang, le shell tentera de l'exécuter lui-même. C'est ce qui se passe pour vous et le shell interprète la première ligne comme un commentaire.

+1

En fait, le chargeur le fait, pas le shell. Voir http://www.in-ulm.de/~mascheck/various/shebang/sys1.c.html pour l'annonce de Dennis Ritchie de cette fonctionnalité quand il a été ajouté à Unix. Cela donne une merveilleuse explication de pourquoi il est préférable que le chargeur le fasse plutôt que le shell. –

+0

@Dan. Merci c'était intéressant. –

Questions connexes