J'ai deux serveurs Linux (Debian). Je crée un script Shell.
Sur le premier je crée ainsi un tableau:
#!/bin/bash
target_array=(
"/home/user/direct/filename -p123 -r"
)
Ça marche bien. Mais quand je lance cela sur l'autre serveur, j'obtiens:
Syntax error: "(" unexpected
Autant que je sache, les deux serveurs sont les mêmes. Quelqu'un peut-il nous expliquer pourquoi cela ne fonctionne pas?
Si je le tape directement dans le terminal, ça va?
Il semblerait que lorsque je l'exécute en tant que
sh scriptname.sh
Je reçois l'erreur, mais si je l'exécute en tant que
./scriptname.sh
ça semble aller. Quelle est la différence?
Lorsque vous utilisez ./scriptname.sh
il s'exécute avec /bin/bash
comme dans la première ligne avec #!
. Mais lorsque vous utilisez sh scriptname.sh
il exécute sh
, pas bash
.
Le shell sh
n'a pas de syntaxe pour créer des tableaux, mais Bash a la syntaxe que vous avez utilisée.
Fonctionnement ./scriptname.sh
entraînera la lecture de la première ligne du fichier et verra qu'il doit exécuter ´/bin/bash´ et passer le reste du script à l'interpréteur, tout en exécutant sh scriptname.sh
transmettra le fichier au shell standard de l'utilisateur (par exemple Ash) et il se peut que cet autre interprète ne prenne pas en charge les tableaux comme le fait Bash.
Avec sh scriptname.sh
, Vous l'exécutez avec sh
, pas nécessairement avec bash
. Essayez de comparer sh --version
Sur les deux machines. Et/ou avec dpkg -S $(which sh)
.