2011-06-14 19 views
9

Por alguna razón, esta función está funcionando correctamente, el terminal está enviandofiesta Sintaxis de error: "(" inesperada

newbootstrap.sh: 2: Syntax error: "(" unexpected 

Aquí está mi código (línea 2 es la función 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 

Respuesta

24

Usted está utilizando la sintaxis incorrecta para declarar funciones Use este lugar:.

MoveToTarget() { 
    # Function 
} 

O esto:

function MoveToTarget { 
    # function 
} 

Pero no ambos.

Además, veo que luego usa comas para separar los argumentos (MoveToTarget $SourcePath, $DestPath). Eso también es un problema. bash usa espacios para separar argumentos, no comas. Quita la coma y deberías ser dorado.

+0

Gracias! Tiene sentido ahora. Vi algunos sitios web que hicieron eso. – rsmith

+1

@rsmith ese sitio web era incorrecto, entonces. –

+0

@rsmith Nombra el sitio o fue un sueño :-) – Jens

4

También soy nuevo en la definición de funciones en scripts bash. Estoy usando un bash de versión 4.3.11 (1): - lanzamiento (x86_64-pc-linux-gnu) en Ubuntu 14.04.

No sé por qué, pero la definición que comienza con la palabra clave function nunca me funciona.

Una definición como la siguiente

function check_and_start { 
    echo Hello 
} 

produce el mensaje de error:

Syntax error: "}" unexpected 

Si pongo la { a una nueva línea como:

function my_function 
{ 
    echo Hello. 
} 

imprime un Hello. cuando ejecuto el script, incluso si no llamo a esta función, whi ch es también lo que queremos.

No sé por qué esto no funcionaría porque también miré muchos tutoriales y todos pusieron la llave al final de la primera línea. Tal vez es la versión de bash que usamos? De todos modos, solo póngalo aquí para su información.

Tengo que usar la función de definición de estilo C:

check_and_start() { 
    echo $1 
} 

check_and_start World! 
check_and_start Hello,\ World! 

y funciona como se esperaba.

+1

Estoy teniendo el mismo problema exacto. Dejar caer la función de palabra y agregar paran también funcionó para mí. Noté que cualquiera de los dos tipos de funciones funciona bien en OS X. Aunque mi OS X está ejecutando una versión mucho más antigua de bash. –

+0

Gracias! C-style funciona para shell '' sh '' –