web-dev-qa-db-fra.com

Extensions de fichier pour les scripts Shell Unix

Sur wikipedia, l'article pour . Sh dit:

Pour le type d'extension de fichier .sh, voir Bourne Shell .

Et les autres coques Unix?

Je sais que le Shebang est utilisé à l'intérieur du fichier pour indiquer un interprète à exécuter, mais je me demande:

  • Quels sont les avantages et les inconvénients des extensions de fichiers par rapport à aucune extension de fichier?
46
Amelio Vazquez-Reina

J'appellerais seulement .sh quelque chose qui est destiné à être portable (et, espérons-le est portable).

Sinon, je pense qu'il vaut mieux cacher la langue. Le lecteur attentif le trouvera de toute façon dans la ligne Shebang. (En pratique, .bash ou .zsh, etc… les suffixes sont rarement utilisés.)

35
Stéphane Gimenez

Je dirais qu'il n'existe aucune "bonne pratique" pour les extensions de fichier, strictement sur un plan technique: les systèmes de fichiers Unix/Linux/* BSD ne prennent pas en charge les extensions en soi. Ce que vous appelez une extension n'est qu'un suffixe d'un nom de fichier unique. C'est différent des systèmes de fichiers et OS VM/CMS, VMS, MS-DOS et Windows où une place spéciale dans l'équivalent inode-moral est réservée pour une extension.

Cette petite diatribe maintenant terminée, je pense qu'il est un peu idiot de mettre un suffixe ".sh" ou ".ksh" ou ".bash" sur un nom de fichier de script Shell. Un programme est un programme: il n'y a aucun avantage à distinguer ce qui est exécuté. Aucun unix ou linux ni aucun noyau n'a décidé d'appeler un interprète sur un fichier simplement à cause d'un suffixe de nom de fichier. Tout est fait par le #! ligne, ou une autre séquence d'octets "nombre magique" au début du fichier. En fait, décider quoi exécuter en fonction d'une "extension" de nom de fichier est l'un des facteurs qui font de Windows un aimant de malware. Regardez combien d'escroqueries de logiciels malveillants Windows impliquent un fichier nommé "something.jpg.exe" - par défaut, les nouvelles versions de Windows ne montrent pas l'extension ".exe", et encouragez un utilisateur à double-cliquer simplement sur "l'image". Au lieu de l'exécution d'une vue d'image, le malware s'exécute.

Ce que vous pourriez penser comme une commande directe est souvent un script Shell de toute façon. Parfois, cc a été un sh-script, firefox est un sh-script, startx est un sh-script. Je ne crois pas qu'il y ait un avantage cognitif ou organisationnel à marquer un script avec un suffixe ".sh".

25
Bruce Ediger

En tant que personne ayant travaillé dans une multitude d'environnements? Nix, j'ai dû écrire dans une grande variété de shells. Croyez-le ou non, sur toutes les plateformes, les coques ne sont pas les mêmes. Donc, si vous gérez votre bibliothèque personnelle dans plusieurs shells (si nécessaire), il est très utile d'utiliser des extensions pour identifier les shells. De cette façon, lorsque vous passez à une autre plate-forme et que le shell est légèrement différent, vous savez quels scripts cibler pour les modifications. .sh .ksh .bsh .csh ...

13
Jumpylodo

Vous ne devez pas utiliser une extension pour les exécutables, car ils ne sont pas interchangeables. Imaginez que vous ayez un script Shell a.sh, puis réécrire dans python a.py, vous devez maintenant changer chaque programme qui vous appelle un script, vous avez divulgué les détails de l'implémentation.

Toute l'extension du nom de fichier dans Windows de Mircosoft est un gâchis: par exemple, ce qui aurait pu être a.audio, b.audio, c.audio, est a.mp3, b.wav, c.ogg, et d.picture, e.picture, f.picture est d.jpeg, e.png, f.gif. La plupart du temps, nous ne nous soucions pas du format de l'audio ou de l'image. Nous devons également consacrer beaucoup de temps à enseigner aux nouveaux utilisateurs toutes les extensions de fichier.

8
ctrl-alt-delor

Comme vous l'avez dit, les extensions de fichiers Unix sont purement informatives. Vous avez juste besoin de votre script pour avoir un Shebang correct et être exécutable.

Vous ne pouvez avoir aucune extension ou utiliser .sh.

J'utilise personnellement les conventions suivantes, quel que soit le Shell utilisé (csh, tcsh, bash, sh, ...):

  • aucune extension pour le système ou les scripts de haute qualité (extrêmement rare).
  • le .sh pour les scripts classiques, de bas à haut niveau.
5
Ouki

Les extensions de script shell sont très utiles. Par exemple, j'écris souvent des scripts qui ont plusieurs fichiers dans plusieurs langues (par exemple bash, awk et lua) dans le même répertoire. Si je dois rechercher une chaîne uniquement dans les fichiers bash, l'extension rend cela très pratique, pour réduire les faux positifs. Ou si je veux faire un décompte de lignes de tout mon code bash pour ce projet.

C'est une douleur d'avoir à taper l'extension lors de l'exécution du programme, donc je fais aussi un lien symbolique sans l'extension vers l'exécutable principal, pour le modifier/l'exécuter sans avoir besoin de taper l'extension à chaque fois. Les liens symboliques sont bon marché et faciles.

4
Steve

Comme d'autres l'ont dit, le Shell ne se soucie pas des extensions. Cependant, il permet une identification humaine rapide des fichiers. Je vois des fichiers se terminant par .py ou .sh et je sais rapidement ce qu’ils devraient (au moins) être. Comme le dit Steve, la recherche par extension de fichier ou le comptage de lignes sont également des considérations pratiques.

2
qwr