Bash Синтаксическая ошибка: "(" неожиданный
По какой-то причине эта функция работает правильно, терминал выводит
newbootstrap.sh: 2: Syntax error: "(" unexpected
Вот мой код (строка 2 - это функция MoveToTarget() {
)
#!/bin/bash
function MoveToTarget() {
#This takes to 2 arguments: source and target
cp -r -f "$1" "$2"
rm -r -f "$1"
}
function WaitForProcessToEnd() {
#This takes 1 argument. The PID to wait for
#Unlike the AutoIt version, this sleeps 1 second
while [ $(kill -0 "$1") ]; do
sleep 1
done
}
function RunApplication() {
#This takes 1 application, the path to the thing to execute
exec "$1"
}
#our main code block
pid="$1"
SourcePath="$2"
DestPath="$3"
ToExecute="$4"
WaitForProcessToEnd $pid
MoveToTarget $SourcePath, $DestPath
RunApplication $ToExecute
exit
Ответы
Ответ 1
Вы используете неправильный синтаксис для объявления функций. Используйте это вместо:
MoveToTarget() {
# Function
}
Или это:
function MoveToTarget {
# function
}
Но не оба.
Кроме того, я вижу, что позже вы используете запятые для разделения аргументов (MoveToTarget $SourcePath, $DestPath
). Это тоже проблема. bash использует пробелы для разделения аргументов, а не запятых. Удалите запятую, и вы должны быть золотыми.
Ответ 2
Я также новичок в определении функций в сценариях bash. Я использую bash версии версии 4.3.11 (1): - release (x86_64-pc-linux-gnu) на Ubuntu 14.04.
Я не знаю, почему, но определение, начинающееся с ключевого слова function
, никогда не работает для меня.
Определение, подобное следующему
function check_and_start {
echo Hello
}
выводит сообщение об ошибке:
Syntax error: "}" unexpected
Если я поместил {
в новую строку, например:
function my_function
{
echo Hello.
}
Он печатает a Hello.
, когда я запускаю script, даже если я вообще не вызываю эту функцию, и это то, что мы хотим.
Я не знаю, почему это не сработало, потому что я также смотрел много учебников, и все они положили открытую фигурную скобку в конце первой строки. Может быть, это версия bash, которую мы используем? Во всяком случае, просто поставьте здесь свою информацию.
Мне нужно использовать определение функции C-стиля:
check_and_start() {
echo $1
}
check_and_start World!
check_and_start Hello,\ World!
и работает как ожидалось.
Ответ 3
Я была такая же проблема. Я запускал сценарии в Ubuntu, иногда используя sh vs dash. Кажется, запуск сценариев с sh вызывает проблему, но запуск сценариев с тире работает нормально.