Problème de syntaxe sur mes functions

Bonjour,

Je viens vers vous car je pense avoir un problème de portabilité.

En effet, sur une debian j’ai coder un script en bash avec des fonctions. Par exemple :

     22 function Checkexec ()
     23 {
     24     if [ $? != 0 ]; then
     25         echo ""
     26         echo ""
     27         echo "[ $TIME ] - ERROR : $1"
     28         ERR=1
     29     fi
     30 }

Sur ma debian l’exécution se fait sans problème.

Par contre quand je l’exécute sur une :confused: ubuntu :confused: j’ai l’erreur suivante :

Version de bash :
Debian:

dpkg -l | grep bash ii bash 3.1dfsg-8 The GNU Bourne Again SHell

Ubuntu

ii bash 3.2-0ubuntu18 The GNU Bourne Again SHell ii bash-completion 20060301-3ubuntu3 programmable completion for the bash shell

Vous pensez que ce serai à cause de la version de bash? Je ne pense quand même pas car la version ubuntu est de plus, plus récente

Comme au début #!/bin/bash au lieu de /bin/sh, Ubuntu utilise dash.

Oui mon shibang est bien #!/bin/bash

ls -l /bin/bash -rwxr-xr-x 1 root root 686K 2008-05-12 20:33 /bin/bash

Donc je vois pas le rapport avec dash… du coup :frowning:

ben moi non plus du coup, vérifies les variables d’environnement. Qu’y a-t-il à la ligne 22?

La piste de fran.be est la bonne.

Que donne:
ls -l /bin/bash

A la ligne 22 il y a le début de ma fonction que j’ai indiqué plus haut

[quote]Que donne:
ls -l /bin/bash[/quote]

Le l’ai également indiquer plus haut :wink:

et avant cette ligne?

Le début de mon scripts c’est :

#!/bin/bash
##
#
######################################
##            Functions             ##
######################################

function Checkexec ()              <<--------- ligne 22
{
    if [ $? != 0 ]; then
        echo ""
        echo ""
        echo "[ $TIME ] - ERROR : $1"
        ERR=1
    fi
}

En gros, je vois pas le problème :frowning:

Là ça m’étonnerait que ça soit la ligne 22 (j’en compte 8). Tu peux mettre les lignes 1 à 22 du script?

      1 #!/bin/bash
      2 ##
      3 #
      4 # But         : Sauvegarder la configuration du systeme
      5 #
      6 # Auteur      : kippix - 02/01/2009
      7 #
      8 ##
      9 #set -x
     10 ##
     11 
     12 ######################################
     13 ##            Variables             ##
     14 ######################################
     15 . `dirname $0`/../profile
     16 # Initialisation de mail.txt
     17 cat /dev/null > $LOG/mail.txt
     18 ######################################
     19 ##            Functions             ##
     20 ######################################
     21 
     22 function Checkexec ()

Convaincu ! :slightly_smiling:

Tente ça :

22 function Checkexec() 23 { 24 if [ $? != 0 ]; then 25 echo "" 26 echo "" 27 echo "[ $TIME ] - ERROR : $1" 28 ERR=1 29 fi 30 }

moi j’aurais plutôt dit d’essayer sans le function:

Checkexec () { if [ $? != 0 ]; then echo "" echo "" echo "[ $TIME ] - ERROR : $1" ERR=1 fi }

essaie sans les parenthèses

Ok je vais me résigner à modifier la syntaxe :wink:

Merci à tous

Le man sur les fonctions en bash

Si tu veux garder tes parenthèses, tu peux aussi essayer de mettre un espace entre le nom de la fonction et ces parenthèses.