Sur Wikipédia, l'article pour .sh dit:
Pour le type d'extension de fichier .sh, voir Bourne shell .
Qu'en est-il des 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 fichier par rapport à aucune extension de fichier?
shell-script
files
scripting
filenames
conventions
Amelio Vazquez-Reina
la source
la source
bash script.sh
(oush
bien sûr).Réponses:
Je voudrais seulement appeler
.sh
quelque chose qui est censé être portable (et espérons-le est portable).Sinon, je pense que c'est mieux de 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.)la source
Je dirais qu’il n’existe pas de "bonnes pratiques" pour les extensions de fichiers, pour des raisons techniques: les systèmes de fichiers Unix / Linux / * BSD ne prennent pas en charge les extensions en tant que telles. Ce que vous appelez une extension est simplement un suffixe d'un nom de fichier unique. Cela diffère des systèmes de fichiers et systèmes d'exploitation VM / CMS, VMS, MS-DOS et Windows pour lesquels un emplacement spécial dans l'équivalent moral d'inode est réservé pour une extension.
Ce petit délire maintenant, je pense que c'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’ya aucun avantage à distinguer ce qui est exécuté. Aucun unix, ni linux, ni aucun autre noyau n’a décidé d’appeler un interpréteur sur un fichier uniquement à cause du suffixe du nom de fichier. Tout se fait par la
#!
ligne ou par une autre séquence d'octets "nombre magique" au début du fichier. En fait, décider de ce qu'il faut exécuter en fonction du nom de fichier "extension" est l'un des facteurs qui font de Windows un pôle d'attraction des programmes malveillants. Regardez combien d'escroqueries par des programmes malveillants Windows impliquent un fichier nommé "quelquechose.jpg.exe" - par défaut, les nouvelles versions de Windows n'indiquent pas l'extension ".exe" et encouragent l'utilisateur à double-cliquer sur le "Ce que vous pouvez penser comme une commande directe est souvent un script shell. Parfois,
cc
a été un script sh,firefox
est un script sh,startx
est un script sh. Je ne crois pas qu'il y ait un avantage cognitif ou organisationnel à marquer un script avec un suffixe ".sh".la source
.sh
extension à un script shell , vous devrez la saisir.sh
dans le nom de la commande lors de son démarrage. C'est la raison principale pour laquelle je n'aime pas mettre cette extension dans (même chose avec une ligne de shebang). BTW, le problème dans Windows n’est pas le.exe
préfixe en soi (c’est simple de créer un exécutable nomméimage.jpg
sous Linux, après tout), mais le fait que Windows cache généralement cette extension, combiné au fait que l’action nécessaire pour démarrer un exécutable et ouvrir un document est exactement la même chose.En tant que personne ayant travaillé dans une multitude d’environnements? Nix, j’ai dû écrire dans une grande variété de coques. Croyez-le ou non, sur les plateformes, les coquilles ne sont pas les mêmes. Donc, si vous maintenez votre bibliothèque personnelle dans plusieurs shells (si nécessaire), il est très utile d'utiliser des extensions pour identifier les shells. Ainsi, 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 ...
la source
#!
au début du script (par exemple#!/bin/bash
)?Vous ne devez pas utiliser d’extension pour les exécutables, car ils ne sont pas interchangeables. Imaginez que vous ayez un script shell
a.sh
, puis réécrivez en pythona.py
. Vous devez maintenant changer tous les programmes qui vous appellent script, vous avez perdu le détail de l’implémentation.L'extension complète du nom de fichier dans Windows de Mircosoft est un désordre: par exemple, ce qui aurait pu être
a.audio, b.audio, c.audio
, esta.mp3, b.wav, c.ogg
etd.picture, e.picture, f.picture
estd.jpeg, e.png, f.gif
. La plupart du temps, peu importe le format de l'audio ou de l'image. Nous devons également passer beaucoup de temps à enseigner aux nouveaux utilisateurs toutes les extensions de fichiers.la source
*.sh
je viens de rencontrer est que Debian n’exécuterarun-parts
pas de scripts avec des extensions, comme dans/etc/cron.*/
: archive.oreilly.com/pub/post/runparts_scripts_a_note_about.htmlComme vous l'avez dit, les extensions de fichier Unix sont purement informatives. Vous avez juste besoin de votre script pour avoir un shebang correct et être exécutable.
Vous pouvez soit ne pas avoir d'extension ou utiliser
.sh
.J'utilise personnellement les conventions suivantes, quel que soit le shell utilisé (csh, tcsh, bash, sh, ...):
.sh
pour les scripts classiques, bas à haut grade.la source
Les extensions de script shell sont très utiles. Par exemple, j'écris souvent des scripts contenant plusieurs fichiers dans plusieurs langues (par exemple, bash, awk et lua) dans le même répertoire. Si j'ai besoin de rechercher une chaîne uniquement dans les fichiers bash, l'extension le rend très pratique pour réduire les faux positifs. Ou si je veux faire un compte ligne de tout mon code bash pour ce projet.
Il est difficile de taper l'extension lors de l'exécution du programme. Je crée donc également un lien symbolique sans l'extension vers l'exécutable principal, pour le modifier / l'exécuter sans avoir à taper l'extension à chaque fois. Les liens symboliques sont économiques et faciles.
la source
Comme d'autres l'ont dit, le shell ne se soucie pas des extensions. Cependant, cela 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). Comme le dit Steve, la recherche par extension de fichier ou le comptage de lignes sont également des considérations pratiques.la source