Extensions de fichier pour les scripts shell Unix [fermé]

Fermé . Cette question est basée sur une opinion . Il naccepte pas les réponses actuellement.

Commentaires

  • Parfois, des scripts shell sans shebang (ou sans autorisations dexécution) peuvent être trouvés. Dans ce cas, un nom se terminant par .sh peut être un indice pour lutilisateur de les exécuter avec bash script.sh (ou sh, bien sûr ).
  • Si un script shell a une extension, il sagit généralement de .sh. Je nai jamais vu de script .ksh ou .bash. Cependant, la plupart des scripts shell nont pas dextension, comme tous les scripts de /etc/init.d/* par exemple.
  • Bien quune conclusion simpliste (oui ou non) soit une opinion, les choses à considérer ne le sont pas .

Réponse

Je nappellerais .sh que quelque chose qui est censé être portable (et, espérons-le, est portable).

Sinon, je pense qu’il vaut mieux cacher la langue. Le lecteur attentif le fera trouvez-le quand même dans la ligne shebang. (En pratique, les suffixes .bash ou .zsh, etc… sont rarement utilisés.)

Commentaires

  • Rien que sur cette page, nous pouvons déjà voir un nombre non négligeable de personnes qui lutilisent. Pourquoi dites-vous quils sont " rarement utilisé "? Des citations? Ou est-ce simplement basé sur votre expérience?
  • Jutiliserais .bash si ' est censé provenir par un autre script et nest compatible quavec bash, etc. Sil peut provenir dun shell compatible bourne tel que sh, dash , ou bash, je lui donnerais une extension .sh. Si ' est censé être exécuté, je ne ' pas mettre une extension.

Réponse

Je dirais quil ny a pas de « bonnes pratiques » pour les extensions de fichiers, strictement sur une technicité: les systèmes de fichiers Unix / Linux / * BSD ne « t prend en charge les extensions en soi. Ce que vous appelez une extension est simplement le suffixe dun seul nom de fichier. Cest différent des systèmes de fichiers et des systèmes dexploitation VM / CMS, VMS, MS-DOS et Windows où un endroit spécial dans linode- léquivalent moral est réservé pour une extension.

Cette petite diatribe maintenant terminée, je pense que cest « un peu idiot de mettre un suffixe » .sh « ou » .ksh « ou » .bash « sur un shell nom de fichier de script. Un programme est un programme: il n’ya aucun avantage à distinguer ce qui est exécuté. Aucun noyau unix ou Linux ou tout autre noyau n’a décidé d’appeler un interpréteur sur un fichier uniquement à cause du suffixe du nom de fichier. Tout est fait par le #!, ou une autre séquence d’octets «nombre magique» à la début du fichier. En fait, décider quoi exécuter en fonction dune «extension» de nom de fichier est lun des facteurs qui fait de Windows un aimant pour les logiciels malveillants. Regardez combien descroqueries contre les logiciels malveillants Windows impliquent un fichier nommé « something.jpg.exe » – par défaut, Windows plus récent naffiche pas lextension « .exe » et encouragez un utilisateur à simplement double-cliquer sur « limage ». Au lieu de une vue dimage en cours dexécution, le logiciel malveillant sexécute.

Ce que vous pourriez considérer 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 que ce soit cognitif ou avantage organisationnel à marquer un script avec un suffixe « .sh ».

Commentaires

  • Je ne suis pas daccord! Mon travail consiste à empaqueter une application impliquant des milliers de fichiers allant des exécutables binaires aux scripts shell (ksh, bash et certains csh hérités). Pour moi, croyez-moi, cela fait une différence de pouvoir savoir en un coup d’œil (ou dans une regex) ce type de fichier dont nous discutons et que nous recherchons. Mon point est que pourrait b e un avantage à distinguer ce qui est excuté et une meilleure pratique devrait encourager à indiquer explicitement le type de fichier.
  • @rahmu: écrivez cela comme une réponse. Donnez quelques détails sur la façon dont les noms reconnaissables par regex vous aident à empaqueter (et peut-être à maintenir) cette application. Notez spécifiquement linteraction entre ce qui interprète le fichier et le suffixe du nom de fichier ' et comment cela vous aide à accomplir les tâches. Je ' suis intéressé par des arguments sérieux contre mon point de vue, et je ' suis prêt à changer si je ' m convaincu. Jai voté pour votre commentaire pour le prouver.
  • Jadorerais, malheureusement, je ne peux parler que de mon expérience actuelle dans mon travail actuel.Je ' ne connais pas grand-chose des bonnes pratiques et des normes en général ; Je pense que je devrais faire quelques recherches avant dafficher une réponse ici. Je ' Je vais lexaminer ce soir après le travail 🙂
  • @rahmu Le fichier " existe pour déterminer le type de fichier. Il est capable de distinguer les scripts écrits pour différents shells.
  • Si vous donnez à un script shell une extension .sh, vous ' ll devra taper ce .sh comme faisant partie du nom de la commande lors de son démarrage. Cest ' la raison principale pour laquelle je naime ' pas mettre cette extension (même chose avec tout ce qui a une ligne shebang). BTW, le problème dans Windows nest pas le préfixe .exe en soi (il est ' 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 laction nécessaire pour démarrer un exécutable et ouvrir un document est exactement la même.

Réponse

En tant que personne ayant travaillé dans une multitude denvironnements? nix, jai dû écrire dans une grande variété de coquilles. Croyez-le ou non, sur toutes les plateformes, les obus 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 dutiliser 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 …

Commentaires

  • Cela semble être en accord avec unix.stackexchange.com/questions/31760/ …
  • Vous navez pas de #! au début du script (par exemple #!/bin/bash)?
  • Gnu / Linux, BSD et les UNIX sont tous Unix. Pas besoin de? Nix. Linux est un noyau, Android utilise Linux mais nest pas un Unix (sauf si vous ajoutez un logiciel supplémentaire, auquel cas vous avez une application Unix).
  • @ ctrl-alt-delor: " Unix " est une marque . Les gens utilisent souvent "? Nix " pour éviter le problème de la marque (et les pédants).
  • @JS ` UNIX ' est une marque commerciale de The Open Group. Unix et unix ne sont pas greens.org/about/unix.html

Réponse

Vous ne devez pas utiliser dextension pour les exécutables, car ils ne sont pas interchangeables. Imaginez que vous ayez un script shell a.sh, puis réécrivez en python a.py, vous devez maintenant changer chaque programme qui vous appelle script , vous avez divulgué des détails dimplémentation.

Toute lextension de nom de fichier dans Windows de Mircosoft est un gâchis: par exemple, ce qui aurait pu être a.audio, b.audio, c.audio, cest 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 laudio ou limage est là. Nous devons également passer beaucoup de temps à enseigner aux nouveaux utilisateurs toutes les extensions de fichier.

Commentaires

Réponse

Comme vous lavez dit, les extensions de fichier Unix sont purement informatives. Vous avez juste besoin que votre script ait un shebang correct et soit exécutable.

Vous pouvez soit ne pas avoir dextension, soit utiliser .sh.

I utilise personnellement les conventions suivantes, quel que soit le shell utilisé (csh, tcsh, bash, sh, …):

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

Commentaires

  • Quentendez-vous par " scripts classiques, de bas à haut niveau "?
  • Je pense Je voulais dire abstraction ou niveau dorganisation par là. Cest-à-dire que vous ' ne vous souciez pas du langage / outil de script utilisé derrière certaines commandes: vous nutilisez ' aucune extension. Pour dautres, il est bon de savoir quil sagit dun script shell bash ou exotique (avec lextension appropriée). … mais cétait il y a 2 ans;)

Réponse

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 je dois rechercher une chaîne uniquement dans les fichiers bash, lextension le rend très pratique pour réduire les faux positifs. Ou si je veux faire un compte de ligne de tout mon code bash pour ce projet.

Cest pénible davoir à taper lextension lors de lexécution du programme, donc je crée également un lien symbolique sans lextension de lexécutable principal, pour le modifier / lexécuter sans avoir à taper lextension à chaque fois. Les liens symboliques sont bon marché et faciles.

Commentaires

Réponse

Comme dautres lont 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 quils devraient (au moins) être. Comme Steve le dit, rechercher par extension de fichier ou faire un nombre de lignes sont également des considérations pratiques.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *