Quelle est la différence entre lutilisation de bash et sh pour exécuter un script?

Est-ce que bash et sh exécutent un script différemment? Jai exécuté un script shell avec bash et sh, et jai obtenu la même sortie. Alors, quelle est la différence?

De plus, lorsque vous exécutez simplement ./executable, utilise-t-il bash ou sh?

Commentaires

  • @Pandya La variable $SHELL nest pas utilisée pour décider quel shell interprétera le ./executable scénario. Cela ne ' pas nécessairement dire quel est le shell actuel non plus.
  • @jlliagre oh! daccord. wiki.debian.org dit " SHELL = Le shell actuel. "
  • @Pandya il doit en fait dire " Le shell de connexion de lutilisateur ' ". Le shell actuel peut être différent.

Réponse

Cela dépend du système que vous utilisez. Un de nombreux systèmes dexploitation, en particulier ceux basés sur Linux, sh est un lien vers bash.

Dans ce cas, il Il existe encore des différences de comportement où bash essaie de ressembler davantage à un bourne traditionnel lorsquil est appelé sh, mais il accepte toujours la plupart des bashismes.

Sur certains autres systèmes dexploitation, comme ceux basés sur Debian, sh est fourni par dash, et non par bash. Cela fait une bien plus grande différence car dash ne prend pas en charge les bashismes, étant conçu pour être une implémentation propre du shell POSIX.

Sur les systèmes dexploitation propriétaires, sh est souvent fourni par un ksh88 conforme POSIX qui, comme dash, nimplémente pas les bashismes. Sur Solaris 10 et versions antérieures, en fonction de votre PATH, sh sera probablement un ancien shell Bourne, antérieur à POSIX.

Dans tous les cas, vous avez probablement la même sortie avec votre test simplement parce que votre script nutilisait aucune commande, option ou syntaxe spécifique bash.

Lorsque vous exécutez ./executable, le shell qui sera exécuté dépend essentiellement du shebang écrit au début du script .executable. Ce sera bash si le shebang le spécifie:

#!/bin/bash .... 

Sil ny a pas de shebang et que vous appelez le script à partir dun shell compatible POSIX, le script doit techniquement être exécuté par le premier sh trouvé dans le PATH. De nombreux interpréteurs de shell comme bash, dash et ksh se considèrent comme POSIX, de même interpréter le script. Notez que la variable denvironnement SHELL nest pas utilisée ici.

Commentaires

  • Jai regardé autour de /bin et jai trouvé que sh est un lien symbolique vers dash plutôt que bash. Alors, comment ont-ils géré la même chose? Il nétait ' pas vraiment dexécuter des commandes de script bash, juste des commandes de terminal pour utiliser dautres outils '.
  • Si votre script shell appelle juste séquentiellement dautres commandes, nimporte quel interpréteur shell lexécutera avec le même résultat. Rien dinattendu ici.
  • Ceci nest ' t lié à la question, mais quelle est exactement la différence entre bash et dash?
  • Les deux utilisent la syntaxe du shell Bourne. Comme je lai écrit dans ma réponse, dash est une implémentation propre du standard de shell POSIX. Dautre part, bash est un shell avec un assez grand nombre dextensions et de fonctionnalités non standard, certaines inspirées de ksh, ksh93 et dautres shells, et certains bash spécifiques, connus sous le nom de bashismes. Il existe un outil nommé checkbashisms qui permet didentifier tout ce qui nest pas strictement portable dans un script shell donné.

Réponse

Oui, cela pourrait être, mais ce nest pas nécessaire. Les deux coques ne sont pas les mêmes, mais les bases sont compatibles. Consultez cet article pour plus de détails.

Vous pouvez utiliser la ligne suivante dans un script pour vérifier linterpréteur utilisé:

ps h -p $$ -o args="" | cut -f1 -d" " 

Vous pouvez spécifier explicitement le shell à utiliser lorsque le script est exécuté directement avec la ligne sheebang:

#!/bin/sh 

ou

#!/bin/bash 

Laisser un commentaire

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