# from lxml import etree;
import module2dbk;
print module2dbk.xsl_transform(etree.parse('test-ccap/col10614/index.cnxml'), []);
Error: bash: syntax error near unexpected token `('
Levon
137k33 gold badges200 silver badges190 bronze badges
asked May 20, 2012 at 18:32
Jessica BurnettJessica Burnett
7312 gold badges9 silver badges20 bronze badges
2
add #!/usr/bin/env python
at the top of your script, or call your script using python myscript.py
answered May 20, 2012 at 18:34
1
Are you typing this at the unix command prompt? You should be doing this inside the python environment, ie. type python
at the prompt and work from there.
Also, no ;
needed at the end of the line in Python
answered May 20, 2012 at 18:35
LevonLevon
137k33 gold badges200 silver badges190 bronze badges
1
add
#!/usr/bin/env python
or but i will prefer to use the above one.
#!/usr/bin/python
In case you have installed python 2 and python 3 and python 2 is default you can run python 3 by using these command
#!/usr/bin/env python3
at top of the file
or run this way
python code.py
answered Jan 13, 2015 at 7:14
Well I had exactly the same problem. I had tried everything and nothing really worked. My program was running perfectly on Windows command prompt, and on my iPhone Python app interpreter, but not on my Macbook’s terminal, where I always got the following error whenever I tried to run the program:
bash: syntax error near unexpected token `(‘
Finally the comment above from the user tripleee helped me come up with a solution; although his solution of adding !/usr/bin/python
at the very start of my code didn’t do it for me it helped me understand as he wrote that:
The error message indicates that the script gets executed by bash, not python.
Then I noticed that my code(extra).py contained ‘(‘ apostrophes, I renamed to my codeextra.py and that was it, problem solved.
shim
9,12212 gold badges69 silver badges108 bronze badges
answered Nov 14, 2018 at 19:15
результатом wc -w
будет числовое значение, оно не может быть сравнено указанным вами способом =
с строковым значением null
. В вашем случае нужно использовать, конструкцию -eq 0
. К тому-же вы в условии ставите 2-е константы, тоесть выражение
"pidof python2 run.py | wc -w"
так и останется строкой
pidof python2 run.py | wc -w
.
Для того, чтобы это выражение выдало результат, используйте
$(pidof python2 run.py | wc -w)
.
В общем итоге ваше условие, как я его понял, должно выглядеть следующим образом:
if [ "$(pidof python2 run.py | wc -w)" -eq 0 ]; then
Более того, мне кажется целесообразние, в вашем случае, использовать условие:
if [ -z "$(pidof python2 run.py)" ]; then
IRIP 513 / 145 / 27 Регистрация: 18.04.2015 Сообщений: 1,872 Записей в блоге: 15 |
||||
1 |
||||
Почему ошибка?12.09.2018, 20:16. Показов 3650. Ответов 3 Метки нет (Все метки)
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
12.09.2018, 20:16 |
Ответы с готовыми решениями: Почему ошибка? else: вот здесь ругается Почему ошибка? def check(list1): Почему синтаксическая ошибка flag=0 Вроде как логически, выполнять… Непонятно, почему ошибка 3 |
1289 / 906 / 479 Регистрация: 05.12.2013 Сообщений: 3,073 |
|
12.09.2018, 20:23 |
2 |
Надо сначала python запустить, python3 скорее всего, а то у bash свой синтаксис
1 |
513 / 145 / 27 Регистрация: 18.04.2015 Сообщений: 1,872 Записей в блоге: 15 |
|
12.09.2018, 21:39 [ТС] |
3 |
нашел на запустил python3
0 |
Просто Лис 5256 / 3277 / 1012 Регистрация: 17.05.2012 Сообщений: 9,636 Записей в блоге: 9 |
|
13.09.2018, 11:17 |
4 |
а то у bash свой синтаксис Я б даже сказал, что это другой язык программирования
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
13.09.2018, 11:17 |
Помогаю со студенческими работами здесь Почему возникает ошибка Почему выходит такая ошибка? a = Почему не работает код, в чем ошибка? import tensorflow_hub as… Почему возникает ошибка object is not callable? def opr(self): Почему происходит ошибка с кодом в 8 строк? a = int( input() ) Почему происходит ошибка с кодом в 8 строк? a = int( input() ) Ошибка, не понимаю почему так происходит Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 4 |
Кодирование в терминале Linux Bash стало преобладающей практикой в секторе кодирования. Инженеры-программисты и студенты, изучающие язык программирования, сталкиваются с различными ошибками. Если вы неоднократно сталкивались с такими ошибками, как Синтаксическая ошибка рядом с неожиданным токеном ‘(‘ или Синтаксическая ошибка Bash рядом с неожиданным токеном, вы можете попробовать использовать методы, описанные в статье, и стать опытным программистом. Прочитайте методы, описанные в статье, в разделе порядок описан и исправьте ошибки в командных строках вашего файла.
Linux Bash — интерпретатор командной строки для системы на базе Linux, заменяющий Bourne Shell или sh. Файлы именуются в формате .sh в сценариях Linux Bash. Если в коде сценария оболочки есть проблемы с форматированием, вы можете столкнуться с синтаксической ошибкой. Если ошибка близка к символу (, оболочка подскажет вам ошибку в строке и отобразит ошибку в соответствующей строке. Поскольку Linux Bash является интерпретатором, строка с ошибкой будет возвращена вам в Терминал, и он прекратит сканирование остальных команд в сценарии. Следовательно, вам необходимо исправить ошибку в конкретной командной строке и перейти к следующей, чтобы исправить непредвиденную ошибку токена в сценарии оболочки. Причины синтаксиса ошибка рядом с неожиданным токеном в Linux Bash перечислены ниже в этом разделе, как показано ниже:
-
Кодирование с помощью escape-последовательностей. Если вы написали код в сценарии Bash, escape-последовательности или кавычки в сценарии могут вызвать ошибки. Чтобы исправить ошибку, управляющие последовательности и кавычки должны быть записаны в правильном формате.
-
Неправильный синтаксис в файле кодирования. Синтаксис в коде может привести к синтаксической ошибке, если команда написана с неправильным синтаксисом, например, с изменением порядка циклов.
-
Неправильное использование команды. Если вы неправильно используете команду, например, присваиваете неверное значение, у вас может возникнуть синтаксическая ошибка.
-
Несовместимая ОС в системах. Если оболочка для сценария кодирования несовместима между системами Unix и DOS, у вас может возникнуть непредвиденная ошибка.
-
Проблемы в сценарии оболочки bash. Проблемы, выполняемые в сценарии оболочки bash в файле, скопированном из другой системы, могут привести к непредвиденной ошибке токена.
Рассмотрим файл с именем example.sh, созданный в сценариях Linux Bash со следующими командными строками для пояснений. Файл примера допускает синтаксические ошибки и включает все возможные команды, которые можно использовать в сценарии оболочки.
str= ‘First command line of ‘(example file)’ in the script’ str= [(1,2),(3,4)] if[ $day == “mon” ] then echo “mon” else echo “no mon” fi for VARIABLE in {0..2}; then do echo command1; echo command2; echo command3; echo command4; done while true; do if [ $ day == “mon” ]; then echo “mon”; else echo “not mon”; done; fi
Способ 1: исправить ошибки в каждой командной строке вручную
Первый способ исправить ошибки — исправить синтаксическую ошибку вручную в каждой командной строке скрипта. В этом разделе обсуждаются шаги по устранению синтаксических ошибок рядом с неожиданным токеном в командных строках. Процесс исправления непредвиденной ошибки токена в Терминале описан ниже. Запустите файл в Терминале, введя команду ./example.sh и нажав клавишу Enter.
2. Обратите внимание на строки с непредвиденной ошибкой токена в командных строках результата ниже.
3. Исправьте ошибку в каждой строке, следуя описанным ниже методам по отдельности и сохранив файл.
4. После внесения изменений снова запустите файл и проверьте, устранена ли синтаксическая ошибка в файле.
Шаг I: Чтение содержимого файла
Первым шагом к устранению синтаксической ошибки в командной строке является чтение файла в Терминале. ЕСЛИ есть проблемы с файлом, возможно, вы не сможете просмотреть файл. Обычная практика просмотра файла заключается в запуске файла с помощью команды ./example.sh, но вы не можете изменить содержимое файла. Варианты просмотра содержимого файла и изменения командных строк для исправления синтаксической ошибки рядом с неожиданным токеном ‘(‘ обсуждаются ниже.
Вариант 1: через CAT-команду
Первый вариант — использовать команду cat для просмотра файла в сценарии оболочки. Прочтите содержимое файла с неожиданной ошибкой токена с помощью команды cat, введя команду cat –v example.sh в Терминале.
Примечание 1. Файл example.sh используется в пояснительных целях, и вам необходимо ввести имя файла с непредвиденной ошибкой токена.
Примечание 2. Команда cat –v используется для отображения всех невидимых символов, которые могут представлять собой возврат каретки или пробел без разрыва.
Вариант 2: Через команду VX
Если вы не можете использовать команду cat, вы можете попробовать использовать команду vx для просмотра и изменения команд в файле, используя шаг, указанный ниже. Введите команду sh –vx ./example.sh в Терминале, чтобы открыть файл.
Вариант 3: Через od –a Command
3. Если в командной строке есть несколько невидимых символов, вы можете использовать команду od –a для просмотра файла. Если содержимое файла не видно в файле кода, вы можете попробовать прочитать файл, используя команду od –a example.sh для изменения кода.
Шаг II. Удалите разрывы строк Windows
Если в сценарии оболочки есть разрывы строк Windows, вы можете использовать консольные команды, чтобы удалить разрывы строк и скопировать строки кода в новый файл, чтобы исправить ошибку.
Введите следующую команду в Терминале, чтобы сохранить содержимое файла в другой файл с именем correctedexample.sh, чтобы удалить разрывы строк Windows в сценарии.
tr –d ‘r’ <example.sh> correctedexample.sh
Шаг III: Установите разрешения для вновь созданного файла
Вам необходимо установить разрешение для вновь созданного файла для редактирования файла, чтобы файл можно было выполнить в оболочке. Введите команду как chmod 755 correctedexample.sh в Терминале, чтобы предоставить права доступа к файлу и запустить файл. Теперь вы можете просмотреть исправленный файл и исправить проблемы с форматированием, а также исправить синтаксическую ошибку рядом с неожиданным токеном ‘(‘ в файле.
Шаг IV: форматирование кода в файле
Второй шаг — отформатировать строки кода по отдельности и вручную изменить командные строки в файле. Варианты форматирования файла для исправления синтаксической ошибки рядом с неожиданным токеном ‘(‘ обсуждаются ниже в этом разделе.
Вариант 1: заменить одинарные кавычки двойными кавычками
Если вы используете одинарные кавычки в командной строке, вам нужно изменить команду, заменив одинарную кавычку двойными, чтобы исправить синтаксическую ошибку. В файле example.sh удалите строки кода, содержащие ‘ и ‘ или одинарные кавычки в команде, и замените одинарные кавычки двойными кавычками или » и ». Здесь, в файле примера, вам нужно изменить код как str= «Первая командная строка «(файл примера)» в скрипте»
Примечание. Двойные кавычки необходимы для команд типа параметра, таких как str= “[(1,2),(3,4)]».
Вариант 2: добавить $ к строковым строкам
Если вы добавили строковые значения в скрипт, вам нужно добавить $ к строковым значениям, чтобы исправить синтаксическую ошибку в скрипте. Добавьте $ для командных строк со строковыми значениями, чтобы исправить непредвиденную ошибку. Здесь, в файле примера, измените командную строку как;
str= $ ‘First command line of ‘(example file)’ in the script’
Примечание. Если вы используете $ в строковом значении, вы можете обойти escape-последовательность обратной косой черты, поскольку командные строки декодируются по стандарту ANSI C. Другими словами, используя $ для строкового значения, вы можете избежать использования двойных кавычек вместо одинарных в командных строках.
Вариант 3: преобразовать вкладки в пробелы
Пробелы, которые вы оставили между двумя операторами в команде, должны быть пробелами, а не табуляцией, чтобы исправить синтаксическую ошибку в сценарии. Если вы получаете ошибку на Cygwin, вы можете попробовать преобразовать вкладки в кодах в пробелы, чтобы исправить ошибку. Командная строка представлена ниже как;
do echo command1; echo command2; echo command3; echo command4; done
Приведенную выше команду следует переписать, как показано ниже, чтобы исправить ошибку.
do echo command1; echo command2; echo command3; echo command4; done
Вариант 4. Используйте escape-символы
Если вы используете символ bash, важно использовать escape-символ вместе с символом bash, чтобы исправить синтаксическую ошибку. Круглые скобки или () являются специальными символами bash в файле, поэтому вам нужно будет использовать escape-символ или обратную косую черту в командной строке, чтобы экранировать обычные символы для выполнения команды. Команда str= ‘Первая командная строка ‘(пример файла)’ в команде script’ не выдаст ошибку в Терминале, поскольку используется escape-символ.
Вариант 5. Используйте пробелы между символами
Сценарий оболочки распознает команды и операторы в сценарии по значениям по умолчанию. Вам необходимо обеспечить правильное использование пробелов между символами, чтобы оболочка могла идентифицировать команду, указанную в сценарии. Пробел — это символ, который используется для различения двух символов в командной строке. В коде нет пробела между if и [, which gives the unexpected token error as the if[ command is not identified by the shell. If the code is changed to if [ $ day == “mon” ]; тогда ошибка может быть решена с помощью команды бюллетеня оболочки, если она идентифицируется оболочкой.
Вариант 6. Используйте разделитель команд для операторов
Различные команды в сценарии оболочки должны быть разделены на операторы, чтобы Терминал мог идентифицировать отдельные команды. Вам нужно использовать разделитель команд, чтобы исправить синтаксическую ошибку в Linux Bash. Операторы в команде должны быть разделены разделителем команд, таким как точка с запятой или ; или новую строку, нажав клавишу Enter. Например, команда в коде if [ $ day == “mon” ] тогда нужно изменить, как если бы [ $ day == “mon” ]; затем исправить ошибку. Поскольку точка с запятой используется в качестве разделителя команд между символами [ and then, you can fix this error.
Option 7: Remove Additional Statements
Sometimes, you may have added additional statements or may have mixed up the codes in case of multiple nested loops. You need to remove the additional statements on the command lines to fix the Syntax error near unexpected token ‘(’ in the Linux Bash. The bash loops for…done or and the constructional constructs if… fi needs to be in the correct syntax. The example file has the wrong syntax in the for loop has the term then which is used in the if statement. Modifying the code as the following code will fix the unexpected token error. The statement then is an additional statement in the code and removing the term will fix the error.
for VARIABLE in {0..2}; do echo command1; echo command2; echo command3; echo command4; done
Option 8: Ensure Order of Closing of Statements is Correct
If you are using many nested or conditional construct statements in the shell script, you have to ensure that the loops are closed in the order they are opened. You can use a new line separator to avoid conflicts with the loops. The order of closing the nested loops and conditional statements should be correct and must not be altered. The loops in the code while true; do if [ $ day == “mon” ]; затем эхо «мон»; иначе эхо «не пн»; Выполнено; fi нужно закрывать в правильном порядке. Изменение кода, как показано ниже, может исправить непредвиденную ошибку токена, поскольку порядок закрытия операторов исправлен.
while true; do if [ $ day == “mon” ]; then echo “mon”; else echo “not mon”; fi; done
Способ 2: переписать код
Если вы скопировали код и вставили его в новый файл в Терминале, вы можете попробовать переписать код вручную, чтобы исправить ошибку. Ошибки в коде можно исправить, если вы написали код без каких-либо ошибок формата в сценарии оболочки. Это связано с тем, что скрытые символы и проблемы с форматированием в текстовом редакторе, таком как Microsoft Word, которые вы могли использовать для копирования и вставки кода, могли привести к ошибке.
Способ 3: используйте команду Dos2unix.exe
Если вы используете операционную систему Unix, вы можете писать коды с символом перевода строки как n, чтобы перейти к следующей строке в файле. Однако, если вы используете ОС Windows, вам нужно перейти к следующей строке в коде, используя возврат каретки и перевод строки или rn в файле. Если вы выполняете код, написанный в ОС Windows, в Cygwin, вы можете получить синтаксическую ошибку рядом с неожиданным токеном ‘(‘.
Чтобы исправить ошибку, вам нужно очистить символы возврата каретки, используя инструмент командной строки DOS в Unix в качестве конвертера формата текстового файла. Введите следующую команду как dos2unix.exe example.sh в терминале, и вы сможете преобразовать файл в формат Unix.
***
В статье обсуждались основные методы исправления синтаксической ошибки Bash рядом с неожиданным токеном ‘(‘ в сценарии. Если вы используете Linux Bash, вы можете использовать методы, описанные в этом разделе, для исправления синтаксической ошибки Bash рядом с неожиданным токеном. Если вы Если вы прочитали всю статью и нашли ее содержание полезным, сообщите нам о своих предложениях и вопросах в разделе комментариев.
Документация для модуля команд утверждает, что при запуске getstatusoutput(cmd)
,
cmd
фактически выполняется как{ cmd ; } 2>&1
Это должно объяснить, откуда приходит ; } 2>&1
.
Мое первое предположение заключается в том, что проблема возникает из-за того, что вы не сбрасываете новые строки с конца каждой строки, которую вы читаете из файла, и поэтому команда, которую вы на самом деле выполняете, похожа на
{ ls -l somedir
; } 2>&1
Однако я не очень хорошо знаю программирование оболочки, поэтому я не знаю, как sh
справится с содержимым раздела { ... }
по двум строкам, а также почему он сообщает о проблеме в строке 1, когда теперь две строки.
Вторая догадка заключается в том, что в вашем файле есть пустая строка, и в этом случае sh
может жаловаться, потому что ищет аргумент для ls
, и вместо этого он нашел ; } 2>&1
.
Третье предположение состоит в том, что один из файлов содержит }
или, может быть, ;
, за которым следует }
.
В конечном счете, я не могу точно сказать, в чем проблема, не видя содержимого вашего файла a.txt
.
Кстати, я надеюсь, что этот файл не содержит строки / && sudo rm -rf /
, так как это может вызвать одну или две проблемы.