erreur de syntaxe près de jeton inattendu '- bash
J'ai écrit un script d'exemple sur mon Mac
#!/bin/bash
test() {
echo "Example"
}
test
exit 0
et cela fonctionne bien en affichant Exemple
Lorsque j'exécute ce script sur une machine RedHat, il est dit
erreur de syntaxe près de jeton inattendu '
J'ai vérifié que bash est disponible à l'aide de
cat /etc/shells
which bash shows /bin/bash
Quelqu'un a rencontré le même problème ?
Merci d'avance !
source d'informationauteur user3155779
Vous devez vous connecter pour publier un commentaire.
Il pourrait être un problème de codage de fichiers.
J'ai rencontré un type de fichier de problèmes de codage lorsque vous travaillez sur des fichiers entre les différents systèmes d'exploitation et des rédacteurs dans mon cas, en particulier entre les systèmes Linux et Windows.
Je suggère de vérifier l'encodage du fichier pour vérifier qu'il est adapté à la cible environnement linux. Je suppose un problème de codage est moins probable étant donné que vous utilisez un MAC que si vous aviez utilisé un éditeur de texte Windows, cependant, je pense que le codage de fichier est toujours utile d'examiner.
--- MODIFIER (Ajouter une solution réelle, comme recommandé par @Potatoswatter)
Démontrer comment un type de fichier de codage pourrait être le problème, j'ai copié/collé ton exemple de script dans le bloc-notes de Windows (je n'ai pas accès à un Mac), puis copié sur une machine linux et il a couru:
Dans ce cas, le bloc-notes le fichier a été enregistré avec les retours chariot et les sauts de ligne, la cause de l'erreur indiqué ci-dessus. Le
\r
indique un retour chariot (systèmes Linux résilier lignes avec des sauts de ligne\n
seulement).Sur la machine linux, vous pouvez tester cette théorie en exécutant la commande suivante à la bande de retour chariot à partir du fichier, si elles sont présentes:
Puis essayez d'exécuter le nouveau fichier
sh ./newfile
. Si cela fonctionne, le problème était de retour chariot comme les personnages cachés.Remarque: Ce n'est pas une réplique exacte de votre environnement (je n'ai pas accès à un Mac), cependant, il semble probable pour moi que la question est qu'un éditeur, quelque part, enregistré des retours chariot dans le fichier.
--- /MODIFIER
Développer un peu, systèmes d'exploitation et les éditeurs peuvent avoir différentes encodage de fichier par défaut. Généralement, les applications et les éditeurs vont influencer le type de codage utilisé, par exemple, je pense que le bloc-notes Microsoft et Notepad++ par défaut pour Windows-1252. Il peut y avoir de saut de ligne différences trop (Dans les environnements Windows, un retour chariot et un saut de ligne est souvent utilisé pour mettre fin à des lignes dans les fichiers, alors que sous Linux et OSX, seulement un Saut de ligne est habituellement utilisé).
Une semblable question et de la réponse que les références à l'encodage de fichier est ici: mauvais caractère apparaître dans l'exécution du script bash
essayer quelque chose comme
Moyen facile de convertir des
example.sh
fichier àUNIX
si vous travaillez sous Windows est d'utiliser NotePad++ (Edit>Conversion EOL>UNIX/OSX Format)Vous pouvez également définir la valeur par défaut EOL dans notepad++ (Paramètres>Préférences>Nouveau Document/Default Directory>sélectionnez Unix/OSX en vertu de la boîte de dialogue Format)
Merci @jdt pour votre réponse.
Par la suite, et depuis je continue à avoir ce problème avec un retour chariot, j'ai écrit ce petit script. N'exécutez
carriage_return
et vous serez invité à entrer le fichier "propre".https://gist.github.com/kartonnade/44e9842ed15cf21a3700
}
Je veux ajouter à la réponse ci-dessus est comment faire pour vérifier si il est de retour chariot problème dans Unix environnement (je l'ai testé dans MacOS)
1) à l'Aide de chat
Si vous voyez les lignes terminé avec
^M$
alors oui, c'est le retour chariot question.2) Trouver la première ligne avec le caractère de retour de chariot
3) à l'Aide de vim
Ensuite dans vim, type
Si vous voyez
fileformat=dos
alors le fichier est à partir d'un environnement dos qui contient un retour chariot.Après la recherche, vous pouvez utiliser les méthodes mentionnées ci-dessus par d'autres personnes pour corriger votre fichier.