Czytałem o && i || i chciałbym uruchomić dwa polecenia w fałszywym przypadku.
Próbowałem, ;
ale to działa zawsze . Próbowałem umieścić go w nawiasach klamrowych, { command1; command2 }
ale powoduje to błąd składniowy.
Chcę zrobić coś takiego
command && echo "Ok, continuing" || echo "Check internet connection"; exit 1
który jest wyłączany tylko wtedy, gdy nie ma połączenia z Internetem.
command-line
bash
Thomas Weller
źródło
źródło
()
i{}
.Odpowiedzi:
Korzystanie z parens umieszcza polecenia w podpowłoce, która nie zawsze jest tym, czego chcesz. Alternatywnie użyj nawiasów klamrowych:
Sztuczka polega na tym, że w przeciwieństwie do parens, po ostatnim poleceniu w nawiasach klamrowych musi nastąpić
;
.Dlaczego wymagany jest średnik lub znak nowej linii
Nawias klamrowy jest prawidłowym argumentem dla polecenia. Na przykład tutaj jest nawias klamrowy jako argument do
echo
:W konsekwencji, jeśli powłoka zobaczy:
Powłoka interpretuje polecenie 1 jako brak argumentów, a polecenie 2 jako jeden argument składający się ze znaku
}
. Nawias klamrowy}
jest interpretowany jako zamykanie grupy tylko wtedy, gdy następuje po średniku lub nowej linii. Aby powyższe zadziałało:Podkładki i różnica między
{...}
i(...)
Zauważ, że następujące zestawy
x
to 10, ale to ustawienie jest zapomniane przed uruchomieniemecho
polecenia:Natomiast w przypadku nawiasów klamrowych
x=10
zapamiętywane jest ustawienie :Różnica polega na tym, że przypisania zmiennych w podpowłoce nie są zachowywane po zakończeniu podpowłoki.
Dokumentacja
Od
man bash
:źródło