Bonjour à tous!
Je suis en train de rédiger un script shell sous Ubuntu mais je galère... Je dois le rendre sous Fedora et j'aimerai savoir si la syntaxe était la même sur les deux os?
Je cherche par exemple à poser une condition "si le nombre d'arguments est différent de 2 alors..." mais il ne cesse de me renvoyer des messages du type line n°deligne commande introuvable...
Aidez moi svp, je suis débutant... ![]()
si tu utilise le meme shell des deux cotes oui.
conseilles, ecris des scripts compatible sh.
Je dois créer des shell en bourne again shell, commençant par #!/bin/bash . Je ne pourrai donc pas faire de .sh
Sinon comment vérifier le type de shell? c'est en rapport avec le sh? Merci pour la patience de celui qui me répondra ^^
c'est con de faire du bash, c'est pas portable a souahit et il y a plein de changement d'une version a l'autre...
≤ commençant par #!/bin/bash . Je ne pourrai donc pas faire de .sh
»
sérieusement, il faut que tu m'expliques comment tu peux dire 2 énormes conneries pareilles.
Tu es malheureusement loin d'être seul à faire la boulette #!/bin/bash (j'ai gueulé deux fois à ce propos la semaine dernière…). Mais maintenant stop. Dites-moi comment vous en arrivez là que je fusille le coupable !
Tu veux faire un script shell po(r)table, donc utilise "#!/bin/sh". Chaque système à sa propre façon d'implanter l'utilitaire sh, mais globalement le résultat est le même partout, c'est à dire sous Linux quelque soit la distro, sous Mac OS X et BSD qui ne disposent ****PAS DE BASH****, et même sous Windows (modulo l'installation de quelques trucs).
Quand à .sh, c'est purement du vent, tu pourrais appeler ton fichier script.jpeg ou script.roberto que ce serait pareil. Ce qui compte n'est pas l'extension dans le cas des scripts, mais le contenu de la première ligne, qui contient l'utilitaire à lancer pour lire/traiter le reste du fichier.
En fait je ne connaissais pas le sh jusqu'à présent, je commence vraiment le shell. Et je dois rendre mon travail en bash, c'est un projet noté donc j'ai pas le choix.
si ca marche en sh, ca marchera en bash.
sand-snake: ça ne t'empèche pas de mettre #!/bin/sh. Un système disposant de bash saura interpréter le script.
Si ton prof te dit de mettre #!/bin/bash, c'est qu'il y connait quedale. Et s'il n'est pas d'accord avec ça, qu'il m'envoie un mail et je lui expliquerais la vie ! ![]()
Chris_27
Alors là je suis désolé mais tu te trompes complètement... Si son prof' lui a dit qu'il devait utiliser bash comme interpréteur de commande, il doit utiliser bash. Regarde.
Déjà tu le dit bien ici :
"Chaque système à sa propre façon d'implanter l'utilitaire sh"
Ouais, regarde sous Ubuntu, sh (/bin) est un lien symbolique vers dash (je dispose quand même de bash hein).
En utilisant sh l'auteur utilisera donc dash qui est très différent de bash.
Donc voilà tout ça pour dire que ça sera un grand bordel d'incompatilité.
Si tu utilises bien explicitement /bin/bash tu es sur d'utiliser bash, l'interpréteur qui saura lire ton script shell.
Mais si tu codes un tant soit peu correctement, ton code sh sera compatible bash, dash, et autres
Wapf
C'est quand même un ti' peu dur de connaître les spécificités de tous les shells tu crois pas ? :/
De toute façon, chaque shell est fait pour quelque chose, si on devait toujours écrire des scripts compatible avec tous les shells, à quoi bon avoir toute cette diversité ?
Pour avoir cherché un peu, les différences se font sur des outils assez spécifiques, autant dire que /bin/sh (peut importe si c'est dash qui interprète au final) conviendra pour une grande quantité de scripts.
deepblue
D'accord mais là on parle de l'implémentation de sh sur les différents système.
Mais tinquiéte hein il existe beaucoup de différence très notable entre tous ces shells. ![]()
l'avantage d'utiliser /bin/sh est que certain shell active un mode de compatibilite sh quand il est invoquer a travers /bin/sh. Du coup, tu as un langage assez proche de sh qui devrais etre compatible a peut pres partout. (sauf chez ce bousin de bash naturellement).
sh n'a pas changer en 20 ans. et bash change tous les 6 mois. Donc si tu cherche a avoir de la compatibilite, je commencerais par ne pas faire de bash. Mais faire du sh et tester le code dans 3 ou 4 shells differents.
godrik
D'accord mais cela implique d'écrire un script compatible avec tous les shells utilisés. Or si l'auteur veut utiliser des fonctionnalités de bash, il devra obligatoirement utilisé /bin/bash.
S'il utilise /bin/sh peut être que sh sera un lien symbolique vers dash (qui n'intègre pas toutes les fonctionnalités de bash). C'est là le blem
Si tu veux de la compatibilite avec le reste du monde (ce qui semble etre le probleme de OP), tu ne veux surtout pas utiliser des specificite de bash...
« Donc voilà tout ça pour dire que ça sera un grand bordel d'incompatilité. »
dash est un sous-ensemble de bash (et un implantation quasi-conforme du vrai sh). Si ton script passe avec dash, il sera parfaitement interprété par bash. Donc non, c'est pas un « grand bordel » comme tu dis, mais au contraire une preuve que le script ne contient pas de basherie et pourra donc être exécuté tel quel sur un Mac ou une BSD.
Les différences majeures entre dash et bash sont :
dash n'a aucune fonctionnalité pour le mode interactif… ce dont on se fiche ici vu que c'est pour un script, donc pas interactif).
bash dispose de patterns de substitution en plus… ce dont on se fout ici car 1) l'auteur du thread est un débutant 2) ces patterns de substitution servent assez rarement de toute façon 3) on peut aisément utiliser sed à la place.
« Si tu utilises bien explicitement /bin/bash tu es sur d'utiliser bash, l'interpréteur qui saura lire ton script shell. »
si tu mets /bin/bash, je suis sûr de ne pas pouvoir lancer ton script parce que je n'ai pas bash./
« D'accord mais cela implique d'écrire un script compatible avec tous les shells utilisés. Or si l'auteur veut utiliser des fonctionnalités de bash, il devra obligatoirement utilisé /bin/bash. »
bien joué… c'est ce qu'on dit depuis le début : « Codez en sh et ça sera compatible partout ».
Pour ce qui est des fonctionnalités de bash, cf ci-dessus.
godrik:
« sauf chez ce bousin de bash naturellement »
tu exagères un peu. Même lui fait des efforts notables quand il est appelé via la commande sh.
StallmanRichard: je t'invite à changer de pseudo. Cf la FAQ, bonne conduite, point 2, tiret 3.
C'est peut-être le vrai Richard Sta *lit le post* ... Ok j'ai rien dit ![]()
"Si tu veux de la compatibilite avec le reste du monde (ce qui semble etre le probleme de OP), tu ne veux surtout pas utiliser des specificite de bash..."
Oui bien sûr mais là je parle sur ce que dis Chris_27 pas l'auteur.
"dash est un sous-ensemble de bash (et un implantation quasi-conforme du vrai sh). Si ton script passe avec dash, il sera parfaitement interprété par bash."
Mais... je parle pas de dash précisément !
Je parle de toutes les implémentations de sh sur les systèmes.
On saura jamais qu'elle shell utilise tel ou tel système !
Au final, tu auras deux solutions : écrire un script shell compatible sh (et ce passer des spécificités de bash) ou utiliser bash (et donc pouvoir utiliser toutes ces fonctionnalités).
Donc arrête de dire des choses du genre :
"Si ton prof te dit de mettre #!/bin/bash, c'est qu'il y connait quedale. Et s'il n'est pas d'accord avec ça, qu'il m'envoie un mail et je lui expliquerais la vie !
"
C'est vraiment n'importe quoi...
C'est au développeur de voir et de faire en sorte de trouver la meilleur solution pour son cas.
"Les différences majeures entre dash et bash sont :
dash n'a aucune fonctionnalité pour le mode interactif… ce dont on se fiche ici vu que c'est pour un script, donc pas interactif).
bash dispose de patterns de substitution en plus… ce dont on se fout ici car 1) l'auteur du thread est un débutant 2) ces patterns de substitution servent assez rarement de toute façon 3) on peut aisément utiliser sed à la place."
Comprends bien que c'est vraiment pas là où je veux en venir...
"si tu mets /bin/bash, je suis sûr de ne pas pouvoir lancer ton script parce que je n'ai pas bash./"
Et si je mets, /bin/sh et que toi /bin/sh est un lien symbolique vers imaginons dash et que j'utilise des spécificités de bash ?
"bien joué… c'est ce qu'on dit depuis le début : « Codez en sh et ça sera compatible partout »."
Et si le développeur veut utiliser des spécificités de bash ? x_x...
Tout ça pour dire je le répète :
C'est au développeur de voir et de faire en sorte de trouver la meilleur solution pour son cas !
"StallmanRichard: je t'invite à changer de pseudo. Cf la FAQ, bonne conduite, point 2, tiret 3."
Je vois pas trop en quoi ça me concerne... M'enfin, j'vais changer de pseudonyme si ça te gène tant que ça. ![]()
evidement, ultimement c'est le choix du developpeur de faire du bash ou du sh. Mais faire du bash n'est que rarement un choix pertinent des que tu as une quelconque contrainte de portabilite. Parceque bash change beaucoup trop d'une version a l'autre. J'avais des scripts que j'utilisais sur plusieurs machines avec des distrib differente et des version differents (principalement debian et centos). C'etait une merde pas croyable bien que je faisais du bash partout.
bash n'apporte pas grande fonctionnallite par rapport a sh et elles ont tendance a etre incompatible d'un bash a l'autre. Donc bon, j'ai tendance a passer maintenant.
"« sauf chez ce bousin de bash naturellement »
tu exagères un peu. Même lui fait des efforts notables quand il est appelé via la commande sh."
Oui, c'est mieux. Enfin, j'ai encore passer 3 heures le jour de ma camera ready pour refaire fonctionner mes scripts de tracage de graph. Et a chaque fois c'est des raisons con. genre "function" qui apparait en bash mais qui n'existe pas en sh...