Funkcje bash Ubuntu..syntax błąd: „(” lub „}” nieoczekiwany

9

Próbuję uruchomić niektóre funkcje bash, ale ciągle napotyka błąd składniowy: „(„ nieoczekiwany. Próbowałem usunąć nawiasy, nawiasy itp. Itd.)… Nic nie działa.

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

#!/bin/bash
function hello () {
echo "Hello world"
}
James A.
źródło
Jak uruchamiasz skrypt?
muru
Z pełnymi uprawnieniami. sh hello.sh
James A
1
patrz ryanstutorials.net/bash-scripting-tutorial/bash-functaions.php
Rinzwind
Zeszłej nocy przeczytałem jego tutoriale i śledziłem je, aby sprawdzić, gdzie się mylę ... ale wciąż pojawia się błąd składniowy, który jest bardzo mylący. Czy shebang nie powinien przynajmniej zapewniać zgodności tej funkcji, nawet jeśli Ubuntu ma inną powłokę?
James A
Problem rozwiązany. Używałem $ sh hello.sh ---> dostaję błąd. Powinienem był użyć ./hello.sh, aby uruchomić go poprawnie. Zgaduję, że shebang został zapisany i użyto domyślnej powłoki Dash?
James A

Odpowiedzi:

18

Jeśli używasz skryptu sh hello.sh, powłoką interpretacyjną nie będzie ta wymieniona w linii shebang, ale /bin/shzostanie ona użyta. W przypadku Debiana i Ubuntu będzie to domyślnie dash.

Aby więc poprawnie uruchomić skrypt za pomocą a bash, użyj jednego z poniższych.

/bin/bash hello.sh

lub

chmod +x hello.sh
./hello.sh

Alternatywnie możesz również ustawić bashjako /bin/sh.

dpkg-reconfigure dash 
Tomasz
źródło
Dziękuję za odpowiedź. Nie mam pojęcia, dlaczego został odrzucony: /
James A,
2

Pierwszy:

Błąd składniowy wynika z (). Usuń () z pliku w następujący sposób:

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

lub możesz po prostu uruchomić następujące polecenie, aby edytować plik:

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

Teraz powinieneś być w stanie uruchomić plik z pożądanym rezultatem.


Alternatywnie :

Możesz dodać linie 2, 3 i 4 do swojego ~/.bashrcpliku.

function hello () {
echo "Hello world"
}

Pamiętaj, nie używaj sudodo edycji ~/.bashrcpliku!

Po dodaniu wierszy do pliku uruchom następującą komendę, aby ponownie uruchomić bash lub „źródło” pliku .bashrc:

. ~/.bashrc

Powinieneś być teraz w stanie uruchomić komendę, helloa „Witaj świecie” powinno zostać wydrukowane w terminalu.


Również:

Zamiast tego możesz edytować plik, aby to powiedzieć:

#!/bin/bash
echo "Hello world"

i nazwij plik helloi zapisz plik w /usr/local/bin.

Po wykonaniu wszystkich tych czynności uczyń plik wykonywalnym, uruchamiając następującą komendę:

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

Powinieneś być teraz w stanie uruchomić komendę, helloa „Witaj świecie” powinno zostać wydrukowane w terminalu.


Wreszcie:

Trzecią opcją byłoby dodanie następującego wiersza do ~/.bashrcpliku:

alias hello='echo "Hello world"'

Następnie źródłowy plik .bashrc za pomocą następującego polecenia:

. ~/.bashrc 
mchid
źródło
Dziękuję za odpowiedzi .... Wypróbowałem kilka i znalazłem odpowiedź dość prostą. Zamiast używać $ sh hello.sh ... ./hello.sh działa dobrze. Musi to być napisany szesnastek ^^
James A
Dlaczego odrzucono odpowiedź Thomasa? Czy on nie miał racji?
James A
2

GNU Bash jest powłoką używaną domyślnie w terminalach na Ubuntu. Jednak gdy skrypty są uruchamiane podczas uruchamiania systemu, używana jest myślnik, ponieważ jest to myślnik / bin / sh.

Nie zadziała ->

$ sh hello.sh

Będzie działać ->

$./hello.sh

Problem rozwiązany

James A.
źródło
1

Według twojego skryptu:

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

#call this function as follow:
hello   # Syntax Correct
hello() # Syntax Error
Benny
źródło