.bash_profile: Zeile 260: Syntaxfehler in der Nähe des unerwarteten Tokens „(“

.bash_profile: Zeile 260: Syntaxfehler in der Nähe des unerwarteten Tokens „(“

Ich habe eine Bash-Funktion:

WORKING_REACT_EXAMPLES="$HOME/tutorials/javascript/react/working-react-examples"
dualpush() { cd $WORKING_REACT_EXAMPLES; cmpushall "$1"; cd ..; cmpushall $1; cd $WORKING_REACT_EXAMPLES ;}

es sieht ähnlich aus wie meine anderen Funktionen. Wenn ich versuche, .bashrc als Quelle zu verwenden, erhalte ich

$ src
-bash: /Users/cchilders/.bash_profile: line 260: syntax error near unexpected token `('
-bash: /Users/cchilders/.bash_profile: line 260: `dualpush() { cd $WORKING_REACT_EXAMPLES; cmpushall "$1"; cd ..; cmpushall "$1"; cd $WORKING_REACT_EXAMPLES ;}'

Shellcheck warnt davor, etwas in doppelte Anführungszeichen zu setzen, meldet aber keine Fehler.

dualpush() { cd "$WORKING_REACT_EXAMPLES"; cmpushall "$1"; cd ..; cmpushall "$1"; cd "$WORKING_REACT_EXAMPLES" ;}

und bekomme den gleichen Fehler

Was verursacht den Syntaxfehler? Vielen Dank

Antwort1

Dies geschieht normalerweise, wenn der Funktionsname bereits alsaliasmit Parametern.

Die Alias-Ersetzung erfolgt recht früh bei der Shell-Analyse, sodass sie auch Funktionsdeklarationen (und andere Dinge) beeinflusst. Wenn Sie beispielsweise Folgendes hätten ...

alias dualpush="push; push --again"

dualpush() { push; push --again; }

...dann würde es erweitert zu:

push; push --again() { push; push --again; }

Wenn der ursprüngliche Alias ​​mit einem Befehl endetohneParameter, die Dinge funktionieren immer noch, aber die Funktion ist unter dem falschen Namen definiert (unteranderemögliche Überraschungen!). Wenn jedoch der letzte Befehl in diesem Aliashateinige Argumente, dann wird die Erweiterung nicht mehr als Funktionsdeklaration erkannt – stattdessen ()erscheint sie mitten in einem Kommandozeilenargument und wird vom Parser abgelehnt.

Antwort2

Nach dem Schließen des Terminals funktioniert genau derselbe Befehl. Mac hat Fehler bei der Verwendung von Bash-Funktionen, und nachdem bashrc auskommentiert wurde dualpush, bleibt es im Terminal. Beim Neustart des gesamten Terminals funktioniert derselbe Befehl. Ich habe kein Verständnis für dieses schlechte Verhalten, aber das passiert mir unter Ubuntu nicht

verwandte Informationen