-2

У меня есть функция 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 ;}

это похоже на другие мои функции. Когда я пытаюсь получить исходный код .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" ;}

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

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

2 ответа2

1

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

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

alias dualpush="push; push --again"

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

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

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

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

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .