silversmarty Posté(e) le 20 janvier 2012 Posté(e) le 20 janvier 2012 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" ?? SilverSmarty 0 Citer
Sp@r0 Posté(e) le 20 janvier 2012 Posté(e) le 20 janvier 2012 La commande pour la lancer un script c'est : - si tu es dans le r 0 Citer
bud77 Posté(e) le 20 janvier 2012 Posté(e) le 20 janvier 2012 En complément d'info, si tu veux pouvoir lancer un script sans mettre le point slash devant, il faut que le répertoire du script soit déclaré dans le $PATH (Si tu ne sais pas ce que c'est, ne pas y toucher ) 0 Citer
silversmarty Posté(e) le 20 janvier 2012 Auteur Posté(e) le 20 janvier 2012 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 ? 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 0 Citer
bud77 Posté(e) le 20 janvier 2012 Posté(e) le 20 janvier 2012 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 ? 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 Aucun problème en mettant le chemin complet, juste que ./ est plus facile a taper Le she-bang indique uniquement quel environement prendre lors de son lancement (sh; ash; bash; etc etc) 0 Citer
silversmarty Posté(e) le 20 janvier 2012 Auteur Posté(e) le 20 janvier 2012 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 0 Citer
bud77 Posté(e) le 20 janvier 2012 Posté(e) le 20 janvier 2012 Tu as bien installé ipkg et LFTP ? Si oui copie ton message d'erreur ici 0 Citer
PatrickH Posté(e) le 20 janvier 2012 Posté(e) le 20 janvier 2012 Je comprends pas ton problème, qu'est ce qui ne te convient pas dans les explications qui t’ont été données !!?? Tu parle de quel "dysfonctionnement" ? Patrick 0 Citer
Diaoul Posté(e) le 20 janvier 2012 Posté(e) le 20 janvier 2012 (modifié) 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é le 20 janvier 2012 par Diaoul 0 Citer
silversmarty Posté(e) le 20 janvier 2012 Auteur Posté(e) le 20 janvier 2012 Désolé, j'ai l'impression que je n'ai pas été clair dans l'explication de mon problème... 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 0 Citer
bud77 Posté(e) le 20 janvier 2012 Posté(e) le 20 janvier 2012 Ton user a bien les droits sur le répertoire /volume1/scripts/ ? 0 Citer
silversmarty Posté(e) le 20 janvier 2012 Auteur Posté(e) le 20 janvier 2012 j'imagine : je suis admin, c'est moi qui l'ai créé ... et le script tourne (en dehors de ce pb) 0 Citer
bud77 Posté(e) le 20 janvier 2012 Posté(e) le 20 janvier 2012 Le script tourne, sauf quand tu le lances depuis /volume1/scripts si j'ai bien compris, j'essaye de trouver une piste ... :/ 0 Citer
cricx Posté(e) le 20 janvier 2012 Posté(e) le 20 janvier 2012 (modifié) Désolé, j'ai l'impression que je n'ai pas été clair dans l'explication de mon problème... 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é le 20 janvier 2012 par cricx 0 Citer
PatrickH Posté(e) le 20 janvier 2012 Posté(e) le 20 janvier 2012 Sinon avec quoi tu as édité ton script ? sous windows ? vérifie que tu n'as pas des ^M en fin de ligne (en utilisant "vi" par exemple) Patrick 0 Citer
Diaoul Posté(e) le 20 janvier 2012 Posté(e) le 20 janvier 2012 (modifié) 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é le 20 janvier 2012 par Diaoul 0 Citer
cricx Posté(e) le 20 janvier 2012 Posté(e) le 20 janvier 2012 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. 0 Citer
silversmarty Posté(e) le 20 janvier 2012 Auteur Posté(e) le 20 janvier 2012 Après une commande "ls", comment dire ... effectivement, il manque un "x" quelque part 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 0 Citer
Messages recommandés
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.