# problème script sous bash4.1.5

**URL:** <https://www.debian-fr.org/t/probleme-script-sous-bash4-1-5/29925>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 12:22 UTC](https://www.debian-fr.org/t/probleme-script-sous-bash4-1-5/29925 "2016-02-21T00:22:07Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![berniquet](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/bc79bd/32.png) [@berniquet](https://www.debian-fr.org/u/berniquet)\
**Post date:** [Février 21, 2016, 12:22 UTC](https://www.debian-fr.org/t/probleme-script-sous-bash4-1-5/29925/1 "2016-02-21T00:22:07Z")

</div>

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 🙂  
sh testsh  
ok

avec 4.1.5 ![:083](https://www.debian-fr.org/uploads/default/original/1X/d14bbab5e0eb9167fe7ed1d009c5a9b723425957.gif "yeux-ciel")  
sh testsh  
Syntax error: “(” unexpected

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

---

<div class="post-metadata">

**Author:** ![micky979](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/d9b06d/32.png) [@micky979](https://www.debian-fr.org/u/micky979)\
**Post date:** [Février 21, 2016, 12:22 UTC](https://www.debian-fr.org/t/probleme-script-sous-bash4-1-5/29925/2 "2016-02-21T00:22:16Z")

</div>

Bonjour,

Teste ceci :

```auto
essai()
{
   echo "ok";
}
```

---

<div class="post-metadata">

**Author:** ![berniquet](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/bc79bd/32.png) [@berniquet](https://www.debian-fr.org/u/berniquet)\
**Post date:** [Février 21, 2016, 12:22 UTC](https://www.debian-fr.org/t/probleme-script-sous-bash4-1-5/29925/3 "2016-02-21T00:22:20Z")

</div>

merci mais le test n’est pas concluant sans function

sh testsh  
rien ne se s’affiche 😕

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

---

<div class="post-metadata">

**Author:** ![berniquet](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/bc79bd/32.png) [@berniquet](https://www.debian-fr.org/u/berniquet)\
**Post date:** [Février 21, 2016, 12:22 UTC](https://www.debian-fr.org/t/probleme-script-sous-bash4-1-5/29925/4 "2016-02-21T00:22:20Z")

</div>

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](https://www.debian-fr.org/uploads/default/original/1X/0287f377b0e103e172422ffbbe8c639fd3e12c9e.gif "vertige")

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 ?

---

<div class="post-metadata">

**Author:** ![Knucky](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/k/71e660/32.png) [@Knucky](https://www.debian-fr.org/u/Knucky)\
**Post date:** [Février 21, 2016, 12:22 UTC](https://www.debian-fr.org/t/probleme-script-sous-bash4-1-5/29925/5 "2016-02-21T00:22:40Z")

</div>

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
`

---

<div class="post-metadata">

**Author:** ![berniquet](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/bc79bd/32.png) [@berniquet](https://www.debian-fr.org/u/berniquet)\
**Post date:** [Février 21, 2016, 12:22 UTC](https://www.debian-fr.org/t/probleme-script-sous-bash4-1-5/29925/6 "2016-02-21T00:22:41Z")

</div>

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 😊

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)

---

<div class="post-metadata">

**Author:** ![berniquet](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/bc79bd/32.png) [@berniquet](https://www.debian-fr.org/u/berniquet)\
**Post date:** [Février 21, 2016, 12:22 UTC](https://www.debian-fr.org/t/probleme-script-sous-bash4-1-5/29925/7 "2016-02-21T00:22:41Z")

</div>

je viens de redémarrer pour être sûre que toute la config soit prise en compte mais  
rien n’a changé . ![:018](https://www.debian-fr.org/uploads/default/original/1X/35d75f143a06bf2f0d0242498020dfb195b53630.gif "non")  
testsh: 2: Syntax error: «&nbsp;(&nbsp;» unexpected ![:12](https://www.debian-fr.org/uploads/default/original/1X/5ab5476dc281287f8b7ad337242a19cb8485624d.gif "grincheux")

---

<div class="post-metadata">

**Author:** ![micky979](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/d9b06d/32.png) [@micky979](https://www.debian-fr.org/u/micky979)\
**Post date:** [Février 21, 2016, 12:22 UTC](https://www.debian-fr.org/t/probleme-script-sous-bash4-1-5/29925/8 "2016-02-21T00:22:47Z")

</div>

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 ?

---

<div class="post-metadata">

**Author:** ![BBT1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/ecc23a/32.png) [@BBT1](https://www.debian-fr.org/u/BBT1)\
**Post date:** [Février 21, 2016, 12:22 UTC](https://www.debian-fr.org/t/probleme-script-sous-bash4-1-5/29925/9 "2016-02-21T00:22:49Z")

</div>

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

`function f1 {
  echo toto
}`

---

<div class="post-metadata">

**Author:** ![berniquet](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/bc79bd/32.png) [@berniquet](https://www.debian-fr.org/u/berniquet)\
**Post date:** [Février 21, 2016, 12:23 UTC](https://www.debian-fr.org/t/probleme-script-sous-bash4-1-5/29925/10 "2016-02-21T00:23:07Z")

</div>

merci à tous ![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")

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) 😊

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. 😉

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 .

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 12:23 UTC](https://www.debian-fr.org/t/probleme-script-sous-bash4-1-5/29925/11 "2016-02-21T00:23:08Z")

</div>

[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) 😊

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.

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 21, 2016, 12:23 UTC](https://www.debian-fr.org/t/probleme-script-sous-bash4-1-5/29925/12 "2016-02-21T00:23:11Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 12:23 UTC](https://www.debian-fr.org/t/probleme-script-sous-bash4-1-5/29925/13 "2016-02-21T00:23:11Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 21, 2016, 12:23 UTC](https://www.debian-fr.org/t/probleme-script-sous-bash4-1-5/29925/14 "2016-02-21T00:23:13Z")

</div>

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).

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 12:23 UTC](https://www.debian-fr.org/t/probleme-script-sous-bash4-1-5/29925/15 "2016-02-21T00:23:16Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![berniquet](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/bc79bd/32.png) [@berniquet](https://www.debian-fr.org/u/berniquet)\
**Post date:** [Février 21, 2016, 12:23 UTC](https://www.debian-fr.org/t/probleme-script-sous-bash4-1-5/29925/16 "2016-02-21T00:23:22Z")

</div>

[quote=«&nbsp;MisterFreez&nbsp;»]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](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")
