Funzioni bash di Ubuntu ... errore di sintassi: "(" o "}" imprevisto


9

Tentativo di eseguire alcune funzioni bash, ma continua a riscontrare un errore di sintassi: "(" imprevisto. Ho provato a rimuovere parentesi, parentesi ecc. Ecc. Nulla sembra funzionare.

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

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

Come stai eseguendo la sceneggiatura?
muru,

Con autorizzazioni complete. sh hello.sh
James A

1
vedi ryanstutorials.net/bash-scripting-tutorial/bash-functaions.php
Rinzwind

Ho letto i suoi tutorial la scorsa notte e li ho seguiti per vedere dove stavo sbagliando ... ma ho ancora un errore di sintassi che è molto confuso. Lo shebang non dovrebbe almeno rendere compatibile la funzione anche se Ubuntu esegue una shell diversa?
James A

Problema risolto. Stavo usando $ sh hello.sh ---> Ottengo l'errore. Avrei dovuto usare ./hello.sh per eseguirlo correttamente. Immagino che lo shebang venga sovrascritto e che venga utilizzata la dash dash predefinita?
James A

Risposte:


18

Se si esegue lo script con sh hello.sh, la shell di interpretazione non sarà quella menzionata nella riga shebang, ma /bin/shverrà utilizzata. Nel caso di Debian e Ubuntu di default questo sarà dash.

Quindi, per eseguire correttamente lo script con a bash, utilizzare una delle seguenti opzioni.

/bin/bash hello.sh

o

chmod +x hello.sh
./hello.sh

In alternativa puoi anche impostare bashcome /bin/sh.

dpkg-reconfigure dash 

Grazie per la risposta. Non ho idea del perché sia ​​stato votato: /
James A

2

Primo:

L'errore di sintassi è a causa di (). Rimuovi () dal file in questo modo:

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

oppure puoi semplicemente eseguire il comando seguente per modificare il file per te:

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

Ora dovresti essere in grado di eseguire il file con il risultato desiderato.


In alternativa :

È possibile aggiungere le righe 2, 3 e 4 al ~/.bashrcfile.

function hello () {
echo "Hello world"
}

Ricorda, non utilizzare sudoper modificare il tuo ~/.bashrcfile!

Dopo aver aggiunto le righe al file, eseguire il comando seguente per riavviare bash o "source" il file .bashrc:

. ~/.bashrc

Ora dovresti essere in grado di eseguire il comando helloe "Hello world" dovrebbe essere stampato sul terminale.


Anche:

È possibile modificare il file per dire questo invece:

#!/bin/bash
echo "Hello world"

e dai un nome al file helloe salva il file in /usr/local/bin.

Dopo aver fatto tutto ciò, rendere eseguibile il file eseguendo il comando seguente:

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

Ora dovresti essere in grado di eseguire il comando helloe "Hello world" dovrebbe essere stampato sul terminale.


Finalmente:

Una terza opzione sarebbe quella di aggiungere la seguente riga al tuo ~/.bashrcfile:

alias hello='echo "Hello world"'

Quindi, fonte il tuo file .bashrc usando il seguente comando:

. ~/.bashrc 

Grazie per le tue risposte .... Ne ho provate alcune e ho trovato la risposta abbastanza semplice. Invece di usare $ sh hello.sh ... ./hello.sh funziona bene. Deve essere lo shebang che è stato scritto sopra ^^
James A

Perché la risposta di Thomas è stata votata in giù ma? Non aveva ragione?
James A

2

GNU Bash è la shell utilizzata di default nei terminali su Ubuntu. Tuttavia, quando gli script vengono eseguiti all'avvio del sistema, viene utilizzato dash, poiché è dash che è / bin / sh.

Non funzionerà ->

$ sh hello.sh

Funzionerà ->

$./hello.sh

Problema risolto


1

Secondo il tuo copione:

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

#call this function as follow:
hello   # Syntax Correct
hello() # Syntax Error
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.