2012-09-18 8 views
47

che sto cercando di eseguire un bash script sulla mia macchina Ubuntu e mi sta dando un errore:Errore di script Bash: "function: not found". Perché dovrebbe apparire?

function not found

Per provare, ho creato il seguente script che funziona bene sul mio computer portatile, ma non sul mio desktop. Qualche idea sul perché? Il mio portatile è un mac se è rilevante.

#!/bin/bash 

function sayIt { 
    echo "hello world" 
} 

sayIt 

Ciò restituisce "ciao mondo" sul mio portatile, ma sul mio desktop restituisce:

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

Qualsiasi aiuto sarebbe molto apprezzato.

risposta

-3

Non richiede() dopo il nome della funzione o durante la chiamata?

function sayIt() { ... 
} 

sayIt() 

? :)

Hmm, in realtà, sul mio Mac, funziona proprio come si è incollato ..

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

function sayIt() { 
    echo "hello world" 
} 

sayIt 

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

Confronta versione bash, AFAIR qualche vecchia versione necessaria "()" 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$ 

Confronta anche lo stato di opzioni shopt (man bash), su entrambe le conchiglie, forse uno di loro hanno una sintassi compat acceso o spento? Il comando "shopt" senza argomenti elencherà lo stato delle opzioni supportate.

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

+0

mi dà un: Errore di sintassi "(" inaspettato –

+0

Purtroppo, io davvero non so perché la mia risposta per questa domanda è stata downvoted:/ –

+0

È necessario includere il() 'nella funzione definizione' ma non Quando chiami la funzione – Jacob

86

Le probabilità sono che sul desktop non sono in realtà in esecuzione sotto bash ma piuttosto dash o qualche altro shell POSIX-compliant che non riconosce la parola chiave function. La parola chiave function è un bashismo, un'estensione bash. La sintassi POSIX non utilizza function e impone l'uso di parentesi.

$ 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 

Il POSIX-sintassi funziona in entrambi:

$ 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 dalla shell korn, che ha una data precedente alla data – cdarke

+1

+1 Aveva questo problema esatto, ma la bash avrebbe comunque funzionato come previsto.Almeno con la tua spiegazione, conosco il ** perché ** e ** come **! :) – Zuul

6

Ho affrontato lo stesso problema, ho poi modificato la sintassi e ha funzionato per me. Prova a rimuovere la parola funzione e aggiungere parentesi() dopo il nome della funzione.

#!/bin/bash 

sayIt() 
{ 
    echo "hello world" 
} 

sayIt 
Problemi correlati