GNU/Linux >> Tutoriels Linux >  >> Linux

Est-il correct d'utiliser /bin/sh dans le hashbang si le Bourne Shell n'est pas disponible dans une distribution ?

Généralement, les scripts shell contiennent le commentaire suivant sur la première ligne du fichier de script :#!/bin/sh . Selon les recherches que j'ai faites, cela s'appelle "hash bang" et c'est un commentaire conventionnel. Ce commentaire informe Unix que ce fichier est exécuté par le Bourne Shell sous le répertoire /bin .

Ma question commence par ce point. Jusqu'à présent, je n'ai pas vu ce commentaire comme #!/bin/bash . C'est toujours #!/bin/sh . Cependant, les distributions Ubuntu n'ont pas le programme Bourne Shell. Ils ont le Bourne Again Shell (bash).

À ce stade, est-il correct de placer le commentaire #!/bin/sh dans les scripts shell écrits dans les distributions Ubuntu ?

Réponse acceptée :

#!/bin/sh devrait fonctionner sur toutes les distributions Unix et de type Unix. Il est généralement considéré comme le hashbang le plus portable tant que votre script reste conforme à POSIX. Le /bin/sh shell est censé être un shell qui implémente la norme shell POSIX, quel que soit le shell réel qui se fait passer pour /bin/sh coque.

#!/bin/sh est normalement juste un lien maintenant car le shell Bourne n'est plus maintenu. Sur de nombreux systèmes Unix /bin/sh sera un lien vers /bin/ksh ou /bin/ash , sur de nombreux systèmes Linux basés sur RHEL, ce sera un lien vers /bin/bash , cependant sur Ubuntu et de nombreux systèmes basés sur Debian, il s'agit d'un lien vers /bin/dash . Tous les shells, lorsqu'ils sont appelés en tant que sh , entrera en mode de compatibilité POSIX.

Le hashbang est cependant un espace réservé important car il permet une portabilité beaucoup plus grande que les autres méthodes, tant que votre script est strictement conforme à POSIX (répété pour souligner l'importance).

Remarque :Lorsque bash est invoqué en mode POSIX, il autorisera toujours certaines choses non POSIX comme [[ , tableaux, etc. Ces choses peuvent échouer sur un non-bash système.


Linux
  1. Comment Linux gère-t-il plusieurs séparateurs de chemins consécutifs (/home////nom d'utilisateur///fichier) ?

  2. Quelle est la différence entre /sbin/nologin et /bin/false ?

  3. Pourquoi personne n'utilise le True Bourne Shell comme /bin/sh ?

  4. Aucune raison d'avoir un Shebang pointant vers /bin/sh plutôt que /bin/bash ?

  5. Linux – Fusionner /usr/bin et /usr/sbin dans /bin (gnu/linux) ?

/usr/bin Vs /usr/local/bin Sous Linux ?

Pourquoi /bin/sh pointe-t-il vers /bin/dash et non /bin/bash ? ?

Installer les binaires dans /bin, /sbin, /usr/bin et /usr/sbin, interactions avec --prefix et DESTDIR

Quelle est la différence entre #!/usr/bin/env bash et #!/usr/bin/bash ?

cmake --version pointe vers /usr/bin/cmake tandis que cmake pointe vers /usr/local/bin

Quelle est la signification de /usr/sbin, /usr/local/sbin et /usr/local/bin ?