.bash_profile: строка 260: синтаксическая ошибка около неожиданного токена `('

.bash_profile: строка 260: синтаксическая ошибка около неожиданного токена `('

У меня есть функция bash:

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

похоже на мои другие функции. Когда я пытаюсь получить source .bashrc я получаю

$ 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 предупреждает о необходимости двойных кавычек, но не сообщает об ошибках, поэтому я так и делаю

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

и получаю ту же ошибку

Что вызывает синтаксическую ошибку? Спасибо

решение1

Обычно это происходит, когда имя функции уже определено какпсевдонимс параметрами.

Подстановка псевдонимов происходит довольно рано в синтаксическом анализе оболочки, поэтому она также влияет на объявления функций (и другие вещи). Например, если у вас есть следующее...

alias dualpush="push; push --again"

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

...тогда это будет расширено до:

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

Если исходный псевдоним заканчивается командойбезпараметры, все по-прежнему работает, но функция определена под неправильным именем (средидругойпотенциальные сюрпризы!). Однако, если последняя команда в этом псевдонимеимеетнекоторые аргументы, то расширение больше не распознается как объявление функции — вместо этого ()появляется в середине аргумента командной строки и отклоняется синтаксическим анализатором.

решение2

После закрытия терминала работает та же самая команда. У Mac есть недостатки при использовании функций bash, и после sourcing bashrc с dualpushкомментарием он остается в терминале. Перезапуск всего терминала, та же самая команда работает. Я не понимаю этого плохого поведения, но это не происходит со мной на ubuntu

Связанный контент