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