Dans le code bash script, que signifie #!/bin/bash
au niveau de la première ligne ?
UPDATE : Y a-t-il une différence entre #!/bin/bash
y #!/bin/sh
?
Dans le code bash script, que signifie #!/bin/bash
au niveau de la première ligne ?
UPDATE : Y a-t-il une différence entre #!/bin/bash
y #!/bin/sh
?
Cela s'appelle un shebang il indique au shell avec quel programme interpréter le script, lorsqu'il est exécuté.
Dans votre exemple, le script doit être interprété et exécuté par la commande bash coquille.
D'autres exemples de shebangs 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 auxquels je pense spontanément, tels que :
#!/bin/ksh
#!/bin/awk
#!/bin/expect
Dans un script avec le shebang bash, par exemple, vous écrirez votre code avec la syntaxe bash ; alors que dans un script avec le shebang expect, vous le coderez en syntaxe expect, et ainsi de suite.
Réponse à la partie mise à jour :
Cela dépend de ce que /bin/sh
pointe en réalité sur votre système. Souvent, il s'agit simplement d'un lien symbolique vers /bin/bash
. Parfois les scripts portables sont écrits avec #!/bin/sh
juste pour signifier qu'il s'agit d'un shell script, mais il utilise le shell auquel il est fait référence par /bin/sh
sur ce système particulier (peut-être qu'il pointe vers /bin/bash
, /bin/ksh
o /bin/zsh
)
Dans le script de bash, que signifie #!/bin/bash à la 1ère ligne ?
Dans le système Linux, nous avons un shell qui interprète nos commandes UNIX. Il existe un certain nombre de shells dans le système Unix. Parmi eux, il y a un shell appelé bash qui est très très commun à Linux et qui a une longue histoire. C'est un shell par défaut dans Linux.
Lorsque vous écrivez un script (collection de commandes unix et ainsi de suite) vous avez la possibilité de spécifier quel shell il peut être utilisé. Généralement, vous pouvez spécifier quel shell il sera utilisé en utilisant Shebang (Oui, c'est son nom).
Donc si vous #!/bin/bash en haut de vos scripts alors 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 dites à votre environnement/os d'utiliser bash comme interpréteur de commandes. C'est une chose codée en dur.
Chaque système possède son propre shell que le système utilisera pour exécuter ses propres scripts. Ce shell système peut varier d'un OS à l'autre(la plupart du temps ce sera bash. Ubuntu utilise depuis peu tableau de bord comme shell système par défaut). Lorsque vous spécifiez #!/bin/sh alors le système utilisera son shell système interne pour interpréter vos scripts.
Visitez ce site lien pour de plus amples informations où j'ai expliqué ce sujet.
J'espère que cela éliminera vos confusions... Bonne chance.
Lorsque les premiers caractères d'un script sont #!
que l'on appelle le shebang . Si votre fichier commence par #!/path/to/something
la norme est de courir something
et passe le reste du fichier à ce programme comme entrée.
Cela dit, la différence entre #!/bin/bash
, #!/bin/sh
ou encore #!/bin/zsh
indique si les programmes bash, sh ou zsh sont utilisés pour interpréter le reste du fichier. bash
y sh
sont juste 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 reste de la ligne ne doit pas forcément se terminer en sh. Cela pourrait tout aussi bien être #!/usr/bin/python
, #!/usr/bin/perl
ou encore #!/usr/local/bin/my_own_scripting_language
.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.