6 votes

Pourquoi les lignes commentées dans un fichier de configuration Linux fonctionnent-elles parfois ?

Par une ligne commentée j'entends soit :

#!/usr/bin/perl -w

et les commentaires dans le fichier /boot/grub/menu.lst comme décrit dans cette réponse sur superuser.

Il y a déjà un commentaire, c'est-à-dire que la ligne commence par un #, mais il est toujours interprété. Pourquoi est-ce le cas ?

19voto

jobin Points 25504

Toute ligne commençant par un # est un commentaire dans de nombreux langages et est ignorée par l'interpréteur (perl etc.).

Cependant, si la première ligne d'un script sous Linux commence par un #! (shebang comme on l'appelle), ce n'est pas un commentaire mais une directive pour le chargeur de programme pour réellement exécuter le programme spécifié après #! et lui transmettre le nom de votre fichier en dernier argument.

Par exemple, si la première ligne est

#!/usr/bin/perl -w

cela signifie que le shell invoquera effectivement /usr/bin/perl -w /chemin/vers/le/script et vous n'avez pas besoin de spécifier un programme pour exécuter ce script, vous pouvez l'exécuter en utilisant

/chemin/vers/le/script

si vous avez la permission de l'exécuter et qu'il est situé sur un système de fichiers pris en charge pour l'exécution et que le fichier a la permission d'être exécuté.

Pour l'interpréteur, cependant, cette ligne est toujours juste un commentaire, donc si le script est exécuté comme suit:

perl /chemin/vers/le/script

alors la ligne n'a aucun effet. (Merci à Ruslan pour avoir souligné ceci).

Sachez que # n'indique pas toujours un commentaire. Par exemple, une instruction commençant par un # en C est une directive du pré-processeur et non un commentaire.

Dans votre cas, la ligne est un commentaire et sera ignorée lors de l'exécution.

Mise à jour:

Le fichier dont vous parlez est un menu.lst pour lequel un commentaire est une ligne commençant par ## et non #. (Source)

2voto

thomasrutter Points 33791

La ligne commençant par #! est toujours un commentaire, car elle n'est pas exécutée comme des commandes normales.

Mais non seulement c'est un commentaire valide, mais c'est aussi un hashbang, une ligne qui peut être utilisée pour indiquer à l'interpréteur à utiliser pour exécuter ces commandes si le script est appelé seul.

Les hashbangs commencent par un # afin d'être rétrocompatibles avec les interprètes qui ne lisent pas les hashbangs, auquel cas ils seront simplement interprétés comme des commentaires et ignorés.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X