web-dev-qa-db-fra.com

Erreur de script bash: "fonction: introuvable". Pourquoi cela apparaîtrait-il?

J'essaie d'exécuter un bash script sur ma machine Ubuntu et cela me donne une erreur:

fonction non trouvée

Pour tester, j'ai créé le script suivant qui fonctionne très bien sur mon ordinateur portable mais pas sur mon bureau. Une quelconque idée du pourquoi? Mon ordinateur portable est un mac si c'est pertinent.

#!/bin/bash

function sayIt {   
   echo "hello world"
}

sayIt

Cela renvoie "bonjour le monde" sur mon ordinateur portable, mais sur mon bureau, il renvoie:

run.sh: 3: fonction introuvable hello world run.sh: 5: Erreur de syntaxe: "}" inattendu

63
E T

Il y a des chances que sur votre bureau, vous n'exécutiez pas réellement sous bash mais plutôt dash ou un autre Shell compatible POSIX qui ne reconnaît pas le mot clé function. Le mot clé function est un bashisme, une extension bash. La syntaxe POSIX n'utilise pas function et rend obligatoire l'utilisation de parenthèses.

$ more a.sh
#!/bin/sh

function sayIt {   
   echo "hello world"
}

sayIt
$ bash a.sh
hello world
$ dash a.sh
a.sh: 3: function: not found
hello world
a.sh: 5: Syntax error: "}" unexpected

La syntaxe POSIX fonctionne dans les deux:

$ more b.sh
#!/bin/sh

sayIt () {   
   echo "hello world"
}

sayIt
$ bash b.sh
hello world
$ dash b.sh
hello world
115
Ned Deily

J'ai rencontré le même problème, j'ai ensuite modifié la syntaxe et cela a fonctionné pour moi. Essayez de supprimer le mot clé fonction et ajouter - crochets () après le nom de la fonction.

#!/bin/bash

sayIt()
{   
   echo "hello world"
}

sayIt
11
Prateek Joshi

ls -la/bin/sh

vérifier le lien sym où il pointe vers bash ou dash

3
Juda Barnes