2010-10-01 8 views
2

Je cette course comme cible Script Shell dans mon projet XcodeComment puis-je corriger l'erreur shell « erreur de syntaxe près de « Elif » jeton inattendu »

# shell script goes here 
genstrings -u -a -o en.lproj *[hmc] */*[hmc] */*/*[hmc] 
if [ -f "$PROJECT_DIR/build/Release-macosx/UnicodeEscape" ] then 
    build/Release-macosx/UnicodeEscape "en.lproj/Localizable.strings" 
elif [ -f "$PROJECT_DIR/build/Debug-macosx/UnicodeEscape" ] then 
    build/Debug-macosx/UnicodeEscape "en.lproj/Localizable.strings" 
fi 

exit 0 

Je reçois cette erreur:

/Users/aa/Dropbox/Developer/Pandamonia LLC/iPhone/Acey Deucey/build/Acey Deucey.build/Release/GenerateLocalizedStrings.build/Script-00F66869125625D9009F14DA.sh: line 7: syntax error near unexpected token elif' /Users/aa/Dropbox/Developer/Pandamonia LLC/iPhone/Acey Deucey/build/Acey Deucey.build/Release/GenerateLocalizedStrings.build/Script-00F66869125625D9009F14DA.sh: line 7: elif [ -f "$PROJECT_DIR/build/Debug-macosx/UnicodeEscape" ] then' Command /bin/sh failed with exit code 2

Répondre

5

tout d'abord, ne tag pas bash et sh, vous avez un shell, tapez echo $SHELL savoir quel shell que vous utilisez, ou mettre un tralala au début de votre script (#!/usr/bin/env bash)

mettre des points-virgules après vos commandes, y compris [ ... ] qui est un alias pour test. Les terminateurs de commande sont des caractères de nouvelle ligne, ;, &&, || et & et sont obligatoires. Vous pouvez placer plusieurs commandes entre if et then, donc ces points-virgules sont obligatoires.

if [ -f "$PROJECT_DIR/build/Release-macosx/UnicodeEscape" ] ; then 
    build/Release-macosx/UnicodeEscape "en.lproj/Localizable.strings" ; 
elif [ -f "$PROJECT_DIR/build/Debug-macosx/UnicodeEscape" ] ; then 
    build/Debug-macosx/UnicodeEscape "en.lproj/Localizable.strings" ; 
fi 
+0

Les ',' à la fin des déclarations sont nulles-déclarations inutiles. – Jens

+0

@Jens: sauf si vous ne changez pas de ligne. – Benoit

+1

Je ne comprends pas ce que vous essayez de dire. Pouvez-vous s'il vous plait reformuler? – Jens

4

La déclaration then doit être sur une nouvelle ligne, ou distincte de la condition if avec ;.

3

Vous avez besoin de points-virgules avant le mot-clé then.

# shell script goes here 
genstrings -u -a -o en.lproj *[hmc] */*[hmc] */*/*[hmc] 
if [ -f "$PROJECT_DIR/build/Release-macosx/UnicodeEscape" ]; then 
    build/Release-macosx/UnicodeEscape "en.lproj/Localizable.strings" 
elif [ -f "$PROJECT_DIR/build/Debug-macosx/UnicodeEscape" ]; then 
    build/Debug-macosx/UnicodeEscape "en.lproj/Localizable.strings" 
fi 

exit 0 
0

Pour moi, la question est avéré être fin de ligne incorrecte qui devrait être LF et non CRLF.
Cela est arrivé parce que je travaillais à partir de Windows.

Vous pouvez vérifier dans Notepad ++ par:

View >Show symbol >Show all characters

et fixer par:

Edit >EOL Conversion >UNIX/OSX Format

Questions connexes