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
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
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
ls -la/bin/sh
vérifier le lien sym où il pointe vers bash ou dash