Синтаксическая ошибка bash: "(" неожиданно - PullRequest
11 голосов
/ 14 июня 2011

По какой-то причине эта функция работает правильно, терминал выводит

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

Ответы [ 3 ]

26 голосов
/ 14 июня 2011

Вы используете неправильный синтаксис для объявления функций.Используйте это вместо:

MoveToTarget() {
    # Function
}

Или это:

function MoveToTarget {
    # function
}

Но не оба.

Также я вижу, что позже вы используете запятые для разделения аргументов (MoveToTarget $SourcePath, $DestPath).Это тоже проблема.bash использует пробелы для разделения аргументов, а не запятых.Уберите запятую, и вы должны быть золотыми.

4 голосов
/ 02 марта 2016

Я также новичок в определении функций в скриптах bash.Я использую bash версии 4.3.11 (1): - выпуск (x86_64-pc-linux-gnu) на Ubuntu 14.04 .

НадеюсьНе знаю почему, но определение, которое начинается с ключевого слова function, никогда не работает для меня.

Определение, подобное следующему

function check_and_start {
  echo Hello
}

, выдает сообщение об ошибке:

Syntax error: "}" unexpected

Если я добавлю { в новую строку, например:

function my_function
{
    echo Hello.
}

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

Я не знаю, почему это не сработает, потому что я также посмотрел на многие учебные пособия, и все они поставили открытую фигурную скобку в конце первой строки.Может быть, мы используем версию bash ??В любом случае, просто поместите это здесь для вашей информации.

Я должен использовать определение функции в стиле C:

check_and_start() {
  echo $1
}

check_and_start World!
check_and_start Hello,\ World!

, и оно работает как положено.

0 голосов
/ 07 мая 2019

У меня была такая же проблема.Я запускал сценарии в Ubuntu, иногда используя sh vs dash.Кажется, запуск сценариев с sh вызывает проблему, но запуск сценариев с тире работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...