[un peu HS] sha-bang
Le
steve
Bonjour,
Je suis en train d'expliquer les scripts sous *nix à un débutant. Je
dois donc passer par le début à savoir le sha-bang (#!) suivi du chemin
absolu de l'interpréteur de commande (/bin/sh par exemple). Je croyais que
cette première ligne était *obligatoire* pour que le script s'exécute.
Or le script suivant :
<début script>
echo "Ton nom ?"
read nom
echo "Ton nom est $nom"
<fin script>
fonctionne si je le lance par
1) sh script.sh et script.sh n'est pas exécutable
2) ./script.sh et script.sh est exécutable
Donc dans les deux cas sans le sha-bang initial.
Et là je suis embêté pour expliquer le pourquoi du comment.
Pourriez-vous éclairer ma lanterne ?
Merci d'avance
--
Steve
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"
To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Je suis en train d'expliquer les scripts sous *nix à un débutant. Je
dois donc passer par le début à savoir le sha-bang (#!) suivi du chemin
absolu de l'interpréteur de commande (/bin/sh par exemple). Je croyais que
cette première ligne était *obligatoire* pour que le script s'exécute.
Or le script suivant :
<début script>
echo "Ton nom ?"
read nom
echo "Ton nom est $nom"
<fin script>
fonctionne si je le lance par
1) sh script.sh et script.sh n'est pas exécutable
2) ./script.sh et script.sh est exécutable
Donc dans les deux cas sans le sha-bang initial.
Et là je suis embêté pour expliquer le pourquoi du comment.
Pourriez-vous éclairer ma lanterne ?
Merci d'avance
--
Steve
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"
To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

Poser une question


steve a message of 41 lines which said:
Non.
/bin/sh est l'interpréteur par défaut.
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"
To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Le script est simplement interprété par le shell qui le lance; sh dans
le premier cas, le shell courant dans le second cas. La ligne she-bang
permet d'indiquer le programme qui devrait être utilisé pour lire le
script. En son absence, le shell essaie tout seul.
Ici le script est un script shell. Écrit un petit bout de perl ou de
python, ou autre. Tu vas voir que si tu cherches à l'invoquer sans
she-bang, le shell va t'insulter copieusement.
De rien.
--
David.
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"
To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
David Soulayrol a message of 53 lines which said:
Inexact. C'est /bin/sh qui est appelé s'il n'y a pas de she-bang, pas
le shell courant.
Exemple, je suis en zsh :
% echo $ZSH_VERSION
4.3.6
Je mets cette même commande dans un script sans she-bang, je le lance
avec zsh, puis avec le shell par défaut :
% zsh monscript
4.3.6
% ./monscript
%
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"
To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Désolé, je le pensais et je n'ai pas vérifié. Merci de la rectification.
--
David.
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"
To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Après quelques recherches, j'ai trouvé ça dans [1] :
#! peut être omis si le script consiste seulement en un ensemble de
commandes système génériques, sans utiliser de directives shell interne.
Le second exemple, ci-dessus, requiert le #! initial car la ligne
d'affectation des variables, lignesP, utilise une construction
spécifique au shell.
Et comme l'un de vous :
Notez encore que #!/bin/sh appelle
l'interpréteur shell par défaut, qui est /bin/bash sur une machine
Linux.
C'est clair maintenant, merci à vous tous.
[1] http://abs.traduc.org/abs-5.3-fr/ch02.html
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"
To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact