problème script sous bash4.1.5

des scripts créés sous lenny avec le bash3.2.4 de la forme de celui nommé ici testsh

function essai()
{
echo “ok”;
}
essai

sans problème avec 3.2.4 :slightly_smiling:
sh testsh
ok

avec 4.1.5 :083
sh testsh
Syntax error: “(” unexpected

Faut-il utiliser une autre syntaxe?
Si oui , laquelle?
Sera-elle compatible avec ces deux interpréteurs?

Bonjour,

Teste ceci :

essai()
{
   echo "ok";
}

merci mais le test n’est pas concluant sans function

sh testsh
rien ne se s’affiche :confused:

par contre si je lance mon script original de cette manière
. testsh
ok

ou
bash testsh
ok

là le script fonctionne correctement avec bash4.1.5
bizarre bizarre j’ai toujours pensé que bash ou sh c’était choux-vert et vert-choux

De plus dans le bash3.2.4
bash --help renvoi un article similaire à sh --help

quand je le fais dans dans bash4.1.5 sh --help me fait référence à shift et shop !!! :119

je n’y connais pas grand chose mais il semble y avoir un bug la dedans non ?
Est-ce que ce cas mérite un bashbug ?

Pas de problème sous squeeze :

$ bash --version GNU bash, version 4.1.5(1)-release (i486-pc-linux-gnu) Copyright (C) 2009 Free Software Foundation, Inc. $ cat essai essai() { echo "ok"; } essai $ bash essai ok $ readlink -f /bin/sh /bin/dash $ sh essai ok

salut , ma machine est à peine plus récente 256 M de ram également, cadencée à 1 Ghz et de chez AMD.

Architecture: i686
CPU(s): 1
Thread(s) per core: 1
Core(s) per socket: 1
CPU socket(s): 1
Vendor ID: AuthenticAMD
CPU family: 6
Model: 4
Stepping: 2
CPU MHz: 1002.365
L1d cache: 64K
L1i cache: 64K
L2 cache: 256K

readlink -f /bin/sh
/bin/dash

Je vois que je me suis trompé sh fait référence à dash et non à bash :blush:

De fait que je fasse sh testsh ou dash testsh ne change rien.

je viens de faire une mise à jour et je constate que dash a subit une révision ( 0.5.5.1-7.3 -> 0.5.5.1-7.4)

je viens de redémarrer pour être sûre que toute la config soit prise en compte mais
rien n’a changé . :018
testsh: 2: Syntax error: “(” unexpected :12

Bonjour,

Tu n’arrive pas à faire fonctionner le script avec dash, sh ou bash ?

Que se soit pour les trois shell cette syntaxe fonctionne :

essai() { echo "ok"; } essai

Peux tu mettre ce code dans un fichier texte appele test_fonction par exemple et que tu lance via ces trois commandes :

/bin/sh test_fonction /bin/dash test_fonction /bin/bash test_fonction

Tes scripts tu les crée directement sous Linux via vi ou autres éditeurs ou via Windows et tu les transfere ensuite ?

Essaie de déclarer ta fonction sans les parenthèses, comme ceci :

function f1 { echo toto }

merci à tous :023

micky979 tu as raison il est vrai que si mon script est écrit sans #!/bin/bash en première ligne

(ce que j’ai omis de signaler) :blush:

alors les 3 appels fonctionnent.

Néanmoins , sous lenny , cette ligne ne posait aucun problème , peu importe la méthode d’appel !

J’ ai modifier mes scripts en conséquence et le tout fonctionne maintenant correctement tant sous squeeze que lenny. :wink:

J’espère juste que ce comportement n’engendre pas de problème dans d’autres scripts , écrits par d’autres ou pire actifs dans le système à un moment ou un autre .

[quote=“berniquet”]micky979 tu as raison il est vrai que si mon script est écrit sans #!/bin/bash en première ligne

(ce que j’ai omis de signaler) :blush:

alors les 3 appels fonctionnent.

Néanmoins , sous lenny , cette ligne ne posait aucun problème , peu importe la méthode d’appel ![/quote]
Encore une excellente raison d’avoir mis dash en shell POSIX par défaut sous Debian.
Je vai finir par écrir une page sur le wiki à ce sujet.

bash vs dash n’a rien à voir ici, je pense qu’il y a un retour chariot à la fin des lignes notamment dans le «#!/bin/bash», il faudrait éditer le fichier d’origine sous emacs pour voir ou faire un

$ sed -i -e ‘1,$s/\r//g’ fichier

pour voir

Même si c’est bien ce que tu dis. Le fait que quelque chose marche avec bash et pas avec dash souligne une non conformité POSIX quelque part.
C’est le genre de problème qui permettent de se rendre compte ce qui est portable ou non.

Note que dash est devenu le shell par défaut du système, bash reste le shell par défaut des utilisateurs (il est plus puissant mais moins léger et moins rapide).

Je sais mais n’empêche que ce changement a permit de mettre en évidence bon nombre de scripts faux : qui déclaraient un shaban en /bin/sh alors qu’ils utilisaient des fonctionnalités qui ne sont pas dans le bourne shell.

[quote=“MisterFreez”]Encore une excellente raison d’avoir mis dash en shell POSIX par défaut sous Debian.
Je vai finir par écrir une page sur le wiki à ce sujet.[/quote]

effectivement aptitude confirme
Description : interpréteur de commandes conforme à POSIX
L’interpréteur de commandes « dash » (Debian Almquist Shell) est conforme à la
norme POSIX et est dérivé de ash.

Puisqu’il exécute les scripts plus rapidement que bash et dépend de moins de
bibliothèques (le rendant ainsi plus résistant aux pannes logicielles ou
matérielles), c’est l’interpréteur de commandes par défaut sur les systèmes
Debian.

Il serait intéressant pour la amateurs comme moi de trouver de la documentation francophone sur la norme POSIX et leurs liens avec le comportement de la distribution.

Je trouve donc ton initiative :023