GNU/Linux >> Tutoriels Linux >  >> Linux

erreur de syntaxe près du jeton inattendu ' - bash

Merci @jdt pour votre réponse.

Suite à cela, et comme je continue d'avoir ce problème avec le retour chariot, j'ai écrit ce petit script. N'exécutez que carriage_return et vous serez invité à "nettoyer" le fichier.

https://gist.github.com/kartonnade/44e9842ed15cf21a3700

alias carriage_return=remove_carriage_return
remove_carriage_return(){

# cygwin throws error like : 
# syntax error near unexpected token `$'{\r''
# due to carriage return
# this function runs the following
# cat originalfile | tr -d "\r" > newfile

read -p "File to clean ? "
file_to_clean=$REPLY
temp_file_to_clean=$file_to_clean'_'

# file to clean => temporary clean file
remove_carriage_return_one='cat '$file_to_clean' | tr -d "\r" > '
remove_carriage_return_one=$remove_carriage_return_one$temp_file_to_clean

# temporary clean file => new clean file
remove_carriage_return_two='cat '$temp_file_to_clean' | tr -d "\r" > '
remove_carriage_return_two=$remove_carriage_return_two$file_to_clean

eval $remove_carriage_return_one
eval $remove_carriage_return_two
# remove temporary clean file 
eval 'rm '$temp_file_to_clean

}


Il peut s'agir d'un problème d'encodage de fichier.

J'ai rencontré des problèmes d'encodage de type de fichier lorsque je travaillais sur des fichiers entre différents systèmes d'exploitation et éditeurs - dans mon cas, en particulier entre les systèmes Linux et Windows.

Je suggère de vérifier l'encodage de votre fichier pour vous assurer qu'il convient à l'environnement Linux cible. Je suppose qu'un problème d'encodage est moins probable étant donné que vous utilisez un MAC que si vous aviez utilisé un éditeur de texte Windows, mais je pense que l'encodage de fichier vaut toujours la peine d'être pris en compte.

--- EDIT (Ajouter une solution réelle comme recommandé par @Potatoswatter)

Pour démontrer comment l'encodage du type de fichier pourrait être ce problème, j'ai copié/collé votre exemple de script dans le Bloc-notes sous Windows (je n'ai pas accès à un Mac), puis l'ai copié sur une machine Linux et l'ai exécuté :

[email protected]:~/windows> sh ./originalfile             
./originalfile: line 2: syntax error near unexpected token `$'{\r''
'/originalfile: line 2: `test() {

Dans ce cas, le Bloc-notes a enregistré le fichier avec des retours chariot et des sauts de ligne, provoquant l'erreur ci-dessus. Le \r indique un retour chariot (les systèmes Linux terminent les lignes avec des sauts de ligne \n seulement).

Sur la machine Linux, vous pouvez tester cette théorie en exécutant ce qui suit pour supprimer les retours chariot du fichier, s'ils sont présents :

cat originalfile | tr -d "\r" > newfile

Essayez ensuite d'exécuter le nouveau fichier sh ./newfile . Si cela fonctionne, le problème était les retours chariot en tant que caractères masqués.

Remarque : Ce n'est pas une réplique exacte de votre environnement (je n'ai pas accès à un Mac), mais il me semble probable que le problème est qu'un éditeur, quelque part, a enregistré des retours chariot dans le fichier.

--- /MODIFIER

Pour détailler un peu, les systèmes d'exploitation et les éditeurs peuvent avoir des valeurs par défaut d'encodage de fichiers différentes. En règle générale, les applications et les éditeurs influenceront l'encodage du type de fichier utilisé, par exemple, je pense que Microsoft Notepad et Notepad ++ sont par défaut Windows-1252. Il peut également y avoir des différences de saut de ligne à prendre en compte (dans les environnements Windows, un retour chariot et un saut de ligne sont souvent utilisés pour terminer les lignes dans les fichiers, tandis que sous Linux et OSX, seul un saut de ligne est généralement utilisé).

Une question et une réponse similaires qui font référence à l'encodage de fichier sont ici :mauvais caractère apparaissant dans l'exécution du script bash


essayez quelque chose comme

$ sudo apt-get install dos2unix
$ dos2unix offendingfile

Un moyen facile de convertir example.sh fichier à UNIX si vous travaillez sous Windows est d'utiliser NotePad++ (Edition>Conversion EOL>Format UNIX/OSX)

Vous pouvez également définir l'EOL par défaut dans le bloc-notes ++ (Paramètres> Préférences> Nouveau document/Répertoire par défaut> sélectionnez Unix / OSX dans la zone Format)


Linux
  1. Gestion des erreurs dans les scripts Bash

  2. La fête ?

  3. Pourquoi le fichier de traduction Bash ne contient-il pas tous les textes d'erreur ?

  4. Comment activer la coloration syntaxique pour .bash_aliases dans vim ?

  5. Erreur Wget sous-système Windows bash pour Linux

Comment lire un fichier ligne par ligne dans Bash

Commande de source bash

Bash :ajouter au fichier

Remplacement de chaîne dans Bash

35 exemples de scripts bash

Script bash (III)