Bash Script: que signifie #! / Bin / bash?

Dans le script bash, que signifie #!/bin/bash à la 1ère ligne?

MISE À JOUR : Y a-t-il une différence entre #!/bin/bash et #!/bin/sh ?

Cela s’appelle un shebang , il dit au shell quel programme interpréter le script, lorsqu’il est exécuté.

Dans votre exemple, le script doit être interprété et exécuté par le shell bash .

Quelques autres exemples de shebang sont:

(De Wikipedia)

 #!/bin/sh — Execute the file using sh, the Bourne shell, or a compatible shell #!/bin/csh — Execute the file using csh, the C shell, or a compatible shell #!/usr/bin/perl -T — Execute using Perl with the option for taint checks #!/usr/bin/php — Execute the file using the PHP command line interpreter #!/usr/bin/python -O — Execute using Python with optimizations to code #!/usr/bin/ruby — Execute using Ruby 

et quelques autres que je peux penser par-dessus tout, tels que:

 #!/bin/ksh #!/bin/awk #!/bin/expect 

Dans un script avec le bash shebang, par exemple, vous écrivez votre code avec la syntaxe bash; alors que dans un script avec expect shebang, vous le coderiez dans la syntaxe attendue, et ainsi de suite.

Réponse à la partie mise à jour:

Cela dépend de ce que /bin/sh pointe sur votre système. Souvent, il ne s’agit que d’un lien symbolique vers /bin/bash . Parfois, les scripts portables sont écrits avec #!/bin/sh pour indiquer qu’il s’agit d’un script shell, mais il utilise le shell auquel /bin/sh fait référence sur ce système (cela peut indiquer /bin/bash , /bin/ksh ou /bin/zsh )

Dans le script bash, que signifie #! / Bin / bash à la 1ère ligne?

Dans le système Linux, nous avons un shell qui interprète nos commandes UNIX. Maintenant, il existe un certain nombre de shell dans le système Unix. Parmi eux, il y a un shell appelé bash qui est très très répandu sous Linux et qui a une longue histoire. C’est un shell par défaut sous Linux.

Lorsque vous écrivez un script (collection de commandes Unix, etc.), vous avez la possibilité de spécifier quel shell peut être utilisé. En règle générale, vous pouvez spécifier quel shell il peut être en utilisant Shebang (Oui, c’est ce que son nom).

Donc, si vous #! / Bin / bash dans le haut de vos scripts, vous dites à votre système d’utiliser bash comme shell par défaut.

Pour en venir à votre deuxième question: Y a-t-il une différence entre #! / Bin / bash et #! / Bin / sh?

La réponse est oui. Lorsque vous dites #! / Bin / bash, vous indiquez à votre environnement / os d’utiliser bash comme interpréteur de commandes. C’est une chose codée en dur.

Chaque système a son propre shell que le système utilisera pour exécuter ses propres scripts système. Ce shell système peut varier d’un système d’exploitation à l’autre (la plupart du temps, il s’agira de bash. Ubuntu a récemment utilisé dash comme shell système par défaut). Lorsque vous spécifiez #! / Bin / sh, le système utilisera son shell système interne pour interpréter vos scripts shell.

Visitez ce lien pour plus d’informations où j’ai expliqué ce sujet.

J’espère que cela éliminera vos confusions … bonne chance.

Quand les premiers caractères d’un script sont #! , cela s’appelle le shebang . Si votre fichier commence par #!/path/to/something la norme consiste à exécuter something et à transmettre le rest du fichier à ce programme en tant qu’entrée.

Cela dit, la différence entre #!/bin/bash , #!/bin/sh ou même #!/bin/zsh est de savoir si les programmes bash, sh ou zsh sont utilisés pour interpréter le rest du fichier. bash et sh sont que des programmes différents, traditionnellement. Sur certains systèmes Linux, ce sont deux copies du même programme. Sur d’autres systèmes Linux, sh est un lien vers dash , et sur les systèmes Unix traditionnels (Solaris, Irix, etc.), bash est généralement un programme complètement différent de sh .

Bien sûr, le rest de la ligne ne doit pas se terminer en sh. Il pourrait tout aussi bien être #!/usr/bin/python , #!/usr/bin/perl , ou même #!/usr/local/bin/my_own_scripting_language .