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

817
codyc4321

У меня есть функция 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
Сообщение об ошибке гласит «строка 260». Вы только показали две линии. Как выглядит остальная часть файла? grawity 7 лет назад 3
остальная часть файла не имеет отношения к проблеме, это строка 260. Комментирование этой строки устраняет проблему, поэтому проблема находится в этой строке. Я все это добавил в любом случае codyc4321 7 лет назад 0
Казалось бы, фиктивные синтаксические ошибки часто вызваны тонкими синтаксическими ошибками, которые предшествуют им. Может быть довольно большое расстояние между точкой, от которой отказался парсер, и действительной причиной. Daniel B 7 лет назад 2
это правда, Баш хитрый как этот codyc4321 7 лет назад 0

2 ответа на вопрос

1
grawity

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

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

alias dualpush="push; push --again"  dualpush() { push; push --again; } 

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

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

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

правильный; Сначала я определил псевдоним, и, вероятно, с источником. После того, как он решил, что требуется функция bash, этот псевдоним застрял в моем терминале. так что эта проблема происходит, потому что я пишу свои вещи на работе, когда я не устал, не из-за Макса. Ty codyc4321 7 лет назад 0
0
codyc4321

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

«После получения bashrc с закомментированным dualpush он остается в терминале». - Конечно. Это ожидаемое поведение. Вы не удаляете это, в конце концов. Вы также не переопределяете его, поэтому оно остается как есть. Daniel B 7 лет назад 1
Должно быть, я не заметил этого раньше. Sourcing только добавляет; это имеет смысл, поскольку терминал не может удалять вещи только потому, что они не находятся в bashrc; ти codyc4321 7 лет назад 0
Что меня удивило, так это то, что даже если я оставлю то же самое, он обнаружит старую ошибку и не даст мне источник. в Ubuntu, если я исходный код, я получаю новую, правильную команду codyc4321 7 лет назад 0

Похожие вопросы