Ubuntu bash funciones ... error de sintaxis: "(" o "}" inesperado

9

Intentando ejecutar algunas funciones bash, pero sigo encontrando un error de sintaxis: "(" inesperado. He intentado eliminar los corchetes, paréntesis, etc., etc. nada parece funcionar.

$ bash --version
GNU bash, version 4.3.46(1) release

#!/bin/bash
function hello () {
echo "Hello world"
}
James A
fuente
¿Cómo estás ejecutando el script?
muru
Con permisos completos. sh hello.sh
James A
1
ver ryanstutorials.net/bash-scripting-tutorial/bash-functaions.php
Rinzwind
Leí sus tutoriales anoche y los seguí para ver dónde me estaba equivocando ... pero todavía recibo un error de sintaxis que es muy confuso. ¿No debería el shebang al menos hacer que la función sea compatible incluso si Ubuntu está ejecutando un shell diferente?
James A
Problema resuelto. Estaba usando $ sh hello.sh ---> Me sale un error. Debería haber estado usando ./hello.sh para ejecutarlo correctamente. ¿Supongo que el shebang se sobrescribe y se usa el shell de guión predeterminado?
James A

Respuestas:

18

Si está ejecutando el script sh hello.sh, el intérprete de intérpretes no será el mencionado en la línea shebang, sino /bin/shque se utilizará. En el caso de Debian y Ubuntu por defecto esto será dash.

Entonces, para ejecutar su script correctamente con a bash, use cualquiera de los siguientes.

/bin/bash hello.sh

o

chmod +x hello.sh
./hello.sh

Alternativamente, también puede establecer bashcomo /bin/sh.

dpkg-reconfigure dash 
Thomas
fuente
Gracias por la respuesta. No tengo idea de por qué se votó: /
James A
2

Primero:

El error de sintaxis se debe a (). Eliminar () del archivo de esta manera:

#!/bin/bash
function hello {
echo "Hello world"
}

o simplemente puede ejecutar el siguiente comando para editar el archivo por usted:

sed -i 's/() //g' hello.sh

Ahora debería poder ejecutar el archivo con el resultado deseado.


Alternativamente :

Puede agregar las líneas 2, 3 y 4 a su ~/.bashrcarchivo.

function hello () {
echo "Hello world"
}

Recuerde, ¡no lo use sudopara editar su ~/.bashrcarchivo!

Después de agregar las líneas al archivo, ejecute el siguiente comando para reiniciar bash o "fuente" de su archivo .bashrc:

. ~/.bashrc

Ahora debería poder ejecutar el comando helloy "Hello world" debería imprimirse en el terminal.


También:

En su lugar, puede editar el archivo para decir esto:

#!/bin/bash
echo "Hello world"

y nombra el archivo helloy guarda el archivo en /usr/local/bin.

Después de hacer todo eso, haga que el archivo sea ejecutable ejecutando el siguiente comando:

sudo chmod +x /usr/local/bin/hello

Ahora debería poder ejecutar el comando helloy "Hello world" debería imprimirse en el terminal.


Finalmente:

Una tercera opción sería agregar la siguiente línea a su ~/.bashrcarchivo:

alias hello='echo "Hello world"'

Luego, obtenga su archivo .bashrc con el siguiente comando:

. ~/.bashrc 
mchid
fuente
Gracias por sus respuestas ... He probado algunas y he encontrado la respuesta lo suficientemente simple. En lugar de usar $ sh hello.sh ... ./hello.sh funciona bien. Debe ser el shebang sobre escrito ^^
James A
¿Por qué la respuesta de Thomas fue rechazada pero? ¿No era correcto?
James A
2

GNU Bash es el shell utilizado por defecto en terminales en Ubuntu. Sin embargo, cuando las secuencias de comandos se ejecutan en el arranque del sistema, se utiliza el guión, ya que es / bin / sh.

No funcionará ->

$ sh hello.sh

Trabajará ->

$./hello.sh

Problema resuelto

James A
fuente
1

Según tu guión:

#!/bin/bash
function hello () {
    echo "Hello world"
}

#call this function as follow:
hello   # Syntax Correct
hello() # Syntax Error
Benny
fuente