Исправлено: синтаксическая ошибка рядом с неожиданным токеном `('
Синтаксическая ошибка сообщения об ошибке рядом с неожиданным токеном `(' возникает в среде Unix-типа, Cygwin и в интерфейсе командной строки в Windows. Эта ошибка, скорее всего, будет вызвана при попытке запустить отредактированный сценарий оболочки или созданный в старых системах DOS / Windows или Mac.
Это сообщение об ошибке также появляется при вводе команд в командной строке Linux для повседневных задач, таких как ручное копирование файлов и т. Д. Основные причины, по которым возникает это сообщение об ошибке, либо из-за неправильного синтаксиса, либо из-за проблемы ОС при интерпретации команд другой системы / ракушка.
Что вызывает синтаксическую ошибку рядом с неожиданным токеном `('?
Причины этого сообщения об ошибке очень разнообразны и не могут быть перечислены в одной статье, поскольку существуют тысячи возможностей неправильного синтаксиса при выполнении команд. Основными причинами этой ошибки являются:
- Неверный синтаксис при выполнении любой команды на любой платформе. Либо вы не используете команду правильно, либо ввели неверный синтаксис.
- Оболочка не совместима между системами Unix / DOS.
- Есть проблемы с запуском скрипта оболочки bash из другого источника .
В этой статье мы предполагаем, что вы знакомы с основами кодирования и имеете представление о том, что вы делаете. Если вы новичок, лучше всего следовать подробным инструкциям по языку / команде, которые вы пытаетесь выполнить. Возможно, вы допустили ошибку в каком-то синтаксисе.
Решение 1. Проверка синтаксиса и формата команд
Первая и главная причина, по которой вы можете столкнуться с этим сообщением об ошибке, заключается в неправильном синтаксисе в вашем коде или в неправильном формате команд. Каждая команда имеет предопределенный формат, который вы можете увидеть в ее документации. Некоторые параметры являются необязательными, другие являются обязательными.
Кроме того, особое внимание следует уделить дополнительному пространству, использованию двойных кавычек и обязательным параметрам. Если какой-либо из них отсутствует или был объявлен неправильно, вы не сможете выполнить свой код.
Например, вместо следующего кода
[mycom7] # ./ctopo.sh um_test1 [(1, 2), (2, 1)]
Вы должны выполнить это как
[mycom7] # ./ctopo.sh um_test1 "[(1, 2), (2, 1)]"
Кроме того, убедитесь, что вы правильно выполняете скрипт команд / оболочки, если он занимает несколько строк.
Из-за типа параметра двойные кавычки необходимы. Дополнительный пробел также может испортить ваш код и вызвать сообщение об ошибке. Убедитесь, что вы проверили официальную документацию команды, которую вы выполняете, и посмотрите, есть ли там проблема.
Решение 2. Устранение неполадок в сценарии оболочки
Если используется сценарий оболочки, который работает в исходной системе, но возвращает ошибку в целевом объекте, вы можете устранить неполадки сценария, проверив переменные, которые хранятся во время выполнения, а затем посмотрите, что является причиной проблемы. Это очень распространенная причина, так как в некоторых случаях оболочка пытается интерпретировать непечатаемый символ.
Попробуйте запустить оболочку с параметром 'vx'. Это покажет нам, какие команды выполняются и какие значения хранятся в скрипте. Здесь вы можете устранить неполадки и диагностировать, что происходит не так.
Например, выполните скрипт в терминале после включения vx как:
# sh -vx ./test_script5.sh
Вы можете проверить содержимое скрипта с помощью команды cat:
# cat test_script5.sh
Решение 3. Использование команды dos2unix.exe
В текстовых файлах Windows / DOS новая строка представляет собой комбинацию возврата каретки (\ r), за которой следует перевод строки (\ n). В Mac (до Mac OS X) разрыв строки использовал простой возврат каретки (\ r). Unix / Linux и Mac OS X используют перевод строки (\ n). Если вы используете Cygwin, он не сможет обработать сценарии, созданные в DOS / Windows и более старых Mac, из-за дополнительного символа возврата каретки (\ r).
Здесь вы можете выполнить команду «dos2unix.exe», которая преобразует скрипт в правильный формат, а затем вы можете выполнить его без проблем.
В заключение вам необходимо изучить ваши команды и тип используемой вами платформы и убедиться, что нет никаких расхождений. Поскольку мы не можем охватить каждую возможность, у вас будет представление о том, какие ошибки могут возникать и как их исправить.