Я работал над сценарием, который автоматизирует настройку среды разработки для разработки Raspberry Pi (пошаговая информация о работе здесь ). Сценарий связан с этой статьей, но вы также можете найти его здесь . Теперь при запуске этого скрипта установите и настройте среду без ошибок, но вам придется вводить пароль sudo более одного раза из-за значения времени ожидания sudo по умолчанию. Поэтому я начал экспериментировать, удалив все строки sudo и запустив весь сценарий через sudo в командной строке следующим образом:
kemra102@ubuntuvm:~$ sudo ./pi_dev_env_install.sh
Это работает нормально, как и ожидалось, и проходит большую часть до этого момента:
./pi_dev_env_install: 68: ./pi_dev_env_install.sh: Syntax error: "(" unexpected
Теперь эта строка работала нормально, когда не запускался весь скрипт с sudo. Насколько мне известно, в этой строке, выполняющей роль sudo, нет ничего, что могло бы помешать ее работе. У кого-нибудь есть идеи?
источник
dash
вместоbash
. Попробуйте переместить Шебанг в строке 1.Ответы:
Сценарий не начинается со строки Шебанга , поэтому система выполняет его
/bin/sh
. В Ubuntu/bin/sh
- это dash , оболочка, предназначенная для быстрого запуска и запуска с использованием только стандартных функций. Когда тире достигает строки 68, он видит синтаксическую ошибку: эта скобка ничего не значит для него в контексте.Поскольку дефис (как и все другие оболочки) является интерпретатором, он не будет жаловаться, пока выполнение не достигнет проблемной черты. Таким образом, даже если сценарий успешно запустится в какой-то момент вашего тестирования, он будет прерван, как только будет достигнута строка 68.
Строка Шебанга должна быть самой первой вещью в файле. Так как вы используете функции bash, первая строка файла должна быть
#!/bin/bash
или#!/usr/bin/env bash
.источник
sonarqube.sh
Ubuntu 15.10. Изменил заголовок как сказано. Выполнениеsudo sh ./sonar.sh console
. Все еще получаю ошибку.sonarqube.sh
илиsonar.sh
? Прими решение. И в любом случае, если вы не можете решить проблему с информацией в этой теме, задайте новый вопрос с полным содержанием скрипта и скопируйте и вставьте полный текст сообщения об ошибке.#! /bin/sh
отлично выполненного. Теперь, это оставляет меня озадаченным.Если шебанг находится не в первой строке, он не будет соблюден, независимо от оболочки пользователя root,
SHELL
переменной или-s
флага. Вы можете легко подтвердить это простым примером:Запуск этого сценария с помощью sudo вызовет синтаксическую ошибку в последних версиях Ubuntu и Debian.
У вас есть два варианта, чтобы убедиться, что скрипт интерпретируется
bash
:Переместить Шебанг на первую строку
Запустите
sudo
так:источник
Для меня стартовый скрипт с:
работает отлично.
источник
Может быть, у вас есть "(" в директории или имени файла.
источник
Попробуйте dos2unix в файле скрипта. Иногда в источнике есть какие-то скрытые символы.
команда:
источник
Это может произойти, если вы переопределите предполагаемого переводчика. Например, это будет работать с sh независимо от того, какой хеш-бэнг используется (удобно, когда не используется хеш-бэнг):
ИЛИ запустить Bash:
Чтобы позволить этому использовать значение хэша взрыва, определенное сценарием, используйте это:
источник
В моем случае ошибка заключалась в отсутствии разрешений на выполнение файла. Только получил сообщение об ошибке, когда я разделил команды:
источник