2012-09-18 3 views
47

estoy tratando de ejecutar un bash script en mi máquina de Ubuntu y es que me da un error:Error de script de Bash: "función: no encontrado". ¿Por qué aparecerá esto?

function not found

Para probar, he creado el siguiente script que funciona muy bien en mi ordenador portátil, pero no en mi escritorio. ¿Alguna idea de por qué? Mi computadora portátil es un mac si eso es relevante.

#!/bin/bash 

function sayIt { 
    echo "hello world" 
} 

sayIt 

Esto devuelve "hola mundo" en mi portátil, pero en mi escritorio se vuelve:

run.sh: 3: function not found hello world run.sh: 5: Syntax error: "}" unexpected

Cualquier ayuda sería muy apreciada.

Respuesta

-3

¿No requiere() después del nombre de la función o en la llamada?

function sayIt() { ... 
} 

sayIt() 

? :)

Hmm, en realidad, en mi Mac, funciona igual que ha pegado ..

dtpwmbp:~ pwadas$ cat aa.sh 
#!/bin/bash 

function sayIt() { 
    echo "hello world" 
} 

sayIt 

dtpwmbp:~ pwadas$ ./aa.sh 
hello world 
dtpwmbp:~ pwadas$ 

Comparar versión de bash, AFAIR alguna versión anterior requerida "()" s.

dtpwmbp:~ pwadas$ bash --version 
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin12) 
Copyright (C) 2007 Free Software Foundation, Inc. 
dtpwmbp:~ pwadas$ 

También comparar el estado de opciones shopt (man bash), en ambos conchas, tal vez uno de ellos tienen una sintaxis compat conecta o desconecta? El comando "shopt" sin argumentos mostrará el estado de las opciones admitidas.

What is the 'function' keyword used in some bash scripts?

+0

me da: Error de sintaxis "(" inesperada –

+0

Lamentablemente, yo realmente no sé por qué mi respuesta a esta pregunta se downvoted:/ –

+0

Debe incluir el '()' en la función de definición, pero no al llamar a la función – Jacob

86

más probable es que en el escritorio no está funcionando realmente bajo bash sino dash o algún otro shell POSIX que no reconoce la palabra clave function. La palabra clave function es un bashism, una extensión bash. La sintaxis POSIX no usa function y exige el uso de paréntesis.

$ more a.sh 
#!/bin/sh 

function sayIt { 
    echo "hello world" 
} 

sayIt 
$ bash a.sh 
hello world 
$ dash a.sh 
a.sh: 3: function: not found 
hello world 
a.sh: 5: Syntax error: "}" unexpected 

El POSIX-sintaxis funciona en ambas:

$ more b.sh 
#!/bin/sh 

sayIt() { 
    echo "hello world" 
} 

sayIt 
$ bash b.sh 
hello world 
$ dash b.sh 
hello world 
+0

https://wiki.ubuntu.com/DashAsBinSh –

+1

'function' proviene del shell korn, que es anterior a bash. – cdarke

+1

+1 Tenía este problema exacto, pero el bash seguiría funcionando como se esperaba.Al menos con tu explicación, sé el ** por qué ** y el ** cómo **! :) – Zuul

6

que enfrentan el mismo problema, que luego modifiqué la sintaxis y funcionó para mí. Trate de eliminar la palabra clave función y añadir paréntesis() después de que el nombre de la función.

#!/bin/bash 

sayIt() 
{ 
    echo "hello world" 
} 

sayIt 
Cuestiones relacionadas