Aller au contenu

She-Bang Et Lancement D'un Script .sh


silversmarty

Messages recommandés

Bonjour,

Je me suis lancé il y a peu dans les scripts shell, pour découvrir le joli monde de linux (et accessoirement faire des backups de sites distant en ftp, mais c'est un détail...)

Il se trouve que je précise bien le she-bang #!/bin/sh au début de mes scripts, mais mon NAS ne semble pas interpréter cette commande : il m'affiche une erreur si j'apelle mon script directement :

script.sh
alors que la commande suivante est correctement interprétée :
/bin/sh script.sh[/code]

Quel peut être le problème ? J'ai essayé à partir d'un script édité avec Config File Editor (interface DSM) ou bien saisi dans vi, mais l'erreur se reproduit dans les deux cas... Help ! Est-ce que ça peut être un problème de caractère de fin de ligne, de saut de ligne, ou un autre truc du genre "invisible à l'oeil nu" ?? sad.png

SilverSmarty

Lien vers le commentaire
Partager sur d’autres sites

En fait, je lance le script en rapellant le chemin complet à chaque fois (ça me semble plus sécurisant) :

/bin/sh /volume1/scripts/script.sh[/CODE]

ça peut poser problème ? unsure.png

Pour le PATH, j'ai vu ça quelquepart mais je préfère ne pas trop toucher aux variables d'environnement pour l'instant : mon problème se situe sur le she-bang, autant ne pas compliquer les choses wink.png

Lien vers le commentaire
Partager sur d’autres sites

En fait, je lance le script en rapellant le chemin complet à chaque fois (ça me semble plus sécurisant) :

/bin/sh /volume1/scripts/script.sh[/CODE]

ça peut poser problème ? unsure.png

Pour le PATH, j'ai vu ça quelquepart mais je préfère ne pas trop toucher aux variables d'environnement pour l'instant : mon problème se situe sur le she-bang, autant ne pas compliquer les choses wink.png

Aucun problème en mettant le chemin complet, juste que ./ est plus facile a taper :P

Le she-bang indique uniquement quel environement prendre lors de son lancement (sh; ash; bash; etc etc)

Lien vers le commentaire
Partager sur d’autres sites

Bon, mais du coup je ne suis pas plus avancé ...

> Soit le problème vient de mon script lui-même, dans lequel le she-bang est mal écrit mais ça me semble étrange : je suis parti du script de http://www.cobestran.com/actualite/synology-sauvegarde-site-web-par-ftp-avec-lftp/ (d'où l'hypothèse des caractères non visibles exprimée dans mon premier message : retour chariot et compagnie)

> Soit mon Linux ne comprend pas le she-bang, mais je n'y ai pas touché : je ne vois pas ce qui aurai pu causer ce dysfonctionnement du système (un paramètre ?)...

SilverSmarty

Lien vers le commentaire
Partager sur d’autres sites

Le shebang ne sert qu'a exécuter un script sans avoir à faire référence au binaire à utiliser pour lancer le script.

Par exemple:


/volume1/scipts/script.sh

Fera la même chose que:

/bin/sh /volume1/scripts/script.sh

si le shebang est:

#!/bin/sh

Point final. Attention: il faut que le script soit executable hein. +x S'il y a un problème dans ton script quand tu le lance avec:

/bin/sh /volume1/scripts/script.sh

Alors c'est un autre problème et je te conseil d'ouvrir un autre thread avec le contenu de ton script.

Modifié par Diaoul
Lien vers le commentaire
Partager sur d’autres sites

Désolé, j'ai l'impression que je n'ai pas été clair dans l'explication de mon problème...ph34r.png

Diaoul, tu as mis le doigt dessus : normalement, le she-bang permet de s'affranchir de la référence au binaire, sauf que dans mon cas ça ne marche pas :

> /bin/sh /volume1/scripts/script.sh fonctionne

> /volume1/scripts/script.sh ne fonctionne pas, même avec le she-bang dans le script

Je n'ai pas l'erreur sous les yeux, n'ayant pas accès à mon NAS en SSH depuis là où je suis. Je l'indique dès que je peux.

le script :

#!/bin/sh


#sauvegarde du fichier cron (on ne sait jamais ...)

cp /etc/crontab /volume1/scripts/crontab.bck

# arret du service

/usr/syno/etc.defaults/rc.d/S04crond.sh stop

# démarrage du service

/usr/syno/etc.defaults/rc.d/S04crond.sh start

Le script est bien éxecutable, puisque quand je le lance avec la première méthode, il se lance et le résultat est correct.

SilverSmarty

Lien vers le commentaire
Partager sur d’autres sites

Désolé, j'ai l'impression que je n'ai pas été clair dans l'explication de mon problème...ph34r.png

Diaoul, tu as mis le doigt dessus : normalement, le she-bang permet de s'affranchir de la référence au binaire, sauf que dans mon cas ça ne marche pas :

> /bin/sh /volume1/scripts/script.sh fonctionne

> /volume1/scripts/script.sh ne fonctionne pas, même avec le she-bang dans le script

Je n'ai pas l'erreur sous les yeux, n'ayant pas accès à mon NAS en SSH depuis là où je suis. Je l'indique dès que je peux.

le script :

#!/bin/sh


#sauvegarde du fichier cron (on ne sait jamais ...)

cp /etc/crontab /volume1/scripts/crontab.bck

# arret du service

/usr/syno/etc.defaults/rc.d/S04crond.sh stop

# démarrage du service

/usr/syno/etc.defaults/rc.d/S04crond.sh start

Le script est bien éxecutable, puisque quand je le lance avec la première méthode, il se lance et le résultat est correct.

SilverSmarty

non, la première méthode ne nécessite pas que le script soit exécutable.

donne le résultat de

ls -l /volume1/scripts/script.sh

(ça ressemble tellement à un problème de droit d'exécution que ça doit en être un)

si pas le droit d'exécution, l'ajouter :

chmod +x /volume1/scripts/script.sh

Modifié par cricx
Lien vers le commentaire
Partager sur d’autres sites

Le script est bien éxecutable, puisque quand je le lance avec la première méthode, il se lance et le résultat est correct.

La seule conclusion que tu peux tirer du fait que la première méthode fonctionne du coté des droits UNIX est que /bin/sh est exécutable et que /volume1/scripts/script.sh est lisible.

En aucun cas que /volume1/scripts/script.sh est exécutable.

Modifié par Diaoul
Lien vers le commentaire
Partager sur d’autres sites

La seule conclusion que tu peux tirer du fait que la première méthode fonctionne du coté des droits UNIX est que /bin/sh est exécutable et que /volume1/scripts/script.sh est lisible.

En aucun cas que /volume1/scripts/script.sh est exécutable.

voir ma réponse plus haut.

tu as raison.

Lien vers le commentaire
Partager sur d’autres sites

Après une commande "ls", comment dire ... effectivement, il manque un "x" quelque part unsure.png Après avoir donné les droits executables, ça va mieux !

J'ai du lancer le script avec le binaire dans la commande, voir que ça marchait et donc oublié de le rendre éxecutable ... sorry !

Merci infiniement pour votre aide à tous !

SilverSmarty

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.