2012-09-18 5 views
47

Próbuję uruchomić bash script na moim komputerze Ubuntu i to daje mi błąd:Błąd skryptu Bash: "function: not found". Dlaczego to się pojawi?

function not found

Aby przetestować, stworzyłem następujący skrypt, który działa dobrze na moim laptopie, ale nie na moim pulpicie. Jakieś pomysły, dlaczego? Mój laptop to mac, jeśli to jest istotne.

#!/bin/bash 

function sayIt { 
    echo "hello world" 
} 

sayIt 

ta zwraca "Hello World" na moim laptopie, ale na moim pulpicie zwraca:

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

Każda pomoc będzie mile widziane.

Odpowiedz

-3

Czy nie wymaga() po nazwie funkcji lub przy wywołaniu?

function sayIt() { ... 
} 

sayIt() 

? :)

Hmm, właściwie na moim Macu, to działa podobnie jak wklejony ..

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

function sayIt() { 
    echo "hello world" 
} 

sayIt 

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

Porównaj wersję bash, AFAIR niektóre starsza wersja wymagana "()", 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$ 

także porównać stan opcji shopt (man bash), na obu muszli, być może jeden z nich ma jakąś kompatybilnego składni włączyć lub wyłączyć? Komenda "shopt" bez argumentów wyświetli stan obsługiwanych opcji.

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

+0

daje mi: syntax error „(” nieoczekiwany –

+0

Niestety, ja naprawdę nie wiem, dlaczego moja odpowiedź na to pytanie downvoted:/ –

+0

powinien zawierać '()' w funkcji definicji, ale nie podczas wywoływania funkcji – Jacob

86

Są szanse, że na pulpicie nie są faktycznie działa pod bash ale raczej dash lub inne powłoki POSIX, że nie rozpoznaje słowa kluczowego function. Słowo kluczowe function to bashism, rozszerzenie bash. Składnia POSIX nie używa function i wymaga użycia nawiasów.

$ 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 

POSIX-składnia działa w obie:

$ 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' pochodzi z powłoki korn, która poprzedza bash. – cdarke

+1

+1 Miał ten dokładny problem, ale bash nadal działał zgodnie z oczekiwaniami.Przynajmniej z twoim wyjaśnieniem znam ** dlaczego ** i ** jak **! :) – Zuul

6

I w obliczu tego samego problemu, to wówczas zmodyfikowany składnię i pracował dla mnie. Spróbuj usunąć słowa kluczowego funkcji i dodać nawiasy() po nazwie funkcji.

#!/bin/bash 

sayIt() 
{ 
    echo "hello world" 
} 

sayIt