O ile wiem, użycie &
polecenia po służy do uruchomienia go w tle.
Przykład &
użycia:tar -czf file.tar.gz dirname &
A co powiesz na &&
? (spójrz na ten przykład: /server/215179/centos-100-disk-full-how-to-remove-log-files-history-etc#answer-215188 )
bash
shell
command-line
syntax
Kapitan
źródło
źródło
false && echo "Will not be printed"
.W skorupce, kiedy widzisz
celem jest wykonanie polecenia następującego po tym,
&&
tylko jeśli pierwsze polecenie zakończy się powodzeniem. Jest to idiomatyczne dla pocisków Posix i nie tylko w Bash.Ma to na celu zapobieganie uruchomieniu drugiego procesu, jeśli pierwszy się nie powiedzie.
Możesz zauważyć, że użyłem słowa „zamiar” - to nie bez powodu. Nie wszystkie programy zachowują się tak samo, więc aby to zadziałało, musisz zrozumieć, co program uważa za „awarię” i jak sobie z tym poradzić, czytając dokumentację i, w razie potrzeby, kod źródłowy.
Twoja powłoka przyjmuje wartość zwracaną 0 dla wartości true, a inne liczby dodatnie dla wartości false
Programy zwracają sygnał przy wychodzeniu. Powinny zwrócić 0, jeśli zakończą się pomyślnie, lub większą od zera, jeśli nie. Umożliwia to ograniczoną komunikację między procesami.
&&
Się dalejAND_IF
w gramatyki POSIX powłoki , która jest częściąand_or
listy rozkazów, które należą również||
która jestOR_IF
o podobnej semantyki.Symbole gramatyczne cytowane z dokumentacji:
I gramatyka (cytowana również z dokumentacji), która pokazuje, że dowolną liczbę
AND_IF
s (&&
) i / lubOR_IF
s (||
) można łączyć razem (zgodnie zand_or
definicją rekurencyjną):Oba operatory mają jednakowe pierwszeństwo i są oceniane od lewej do prawej (są one skojarzone). Jak mówią doktorzy:
W pierwszym przypadku false to polecenie kończące się ze statusem
1
co oznacza,
echo foo
że nie działa (tj. zwarcieecho foo
). Następnie polecenieecho bar
jest wykonywane.W drugim przypadku true kończy działanie z kodem
0
i dlatego
echo foo
nie jest wykonywany, a następnieecho bar
wykonywany.źródło
Dość powszechnym zastosowaniem „&&” jest kompilowanie oprogramowania za pomocą narzędzi automatycznych. Na przykład:
Zasadniczo, jeśli konfiguracja się powiedzie, make jest uruchamiany w celu skompilowania, a jeśli to się powiedzie, make jest uruchamiany jako root, aby zainstalować program. Używam tego, kiedy jestem pewien, że wszystko będzie działać, i pozwala mi to robić inne ważne rzeczy, takie jak przeglądanie przepływu stosu, a nie „monitorowanie” postępu.
Czasami naprawdę mnie pociąga ...
Robię to, gdy na przykład robię Linuksa od podstaw.
źródło
set -o errexit
Bash.&&
ciągi poleceń razem. Kolejne polecenia są wykonywane tylko wtedy, gdy poprzednie się powiedzą.Podobnie
||
pozwoli na wykonanie kolejnej komendy, jeśli poprzednie nie powiedzie się.Zobacz Programowanie powłoki Bash .
źródło
Zobacz przykład:
Shell spróbuje utworzyć katalog,
test
a następnie, tylko jeśli się powiedzie , spróbuje utworzyć w nim plik.Możesz więc przerwać sekwencję kroków, jeśli jeden z nich się nie powiedzie.
źródło
Wykonuje drugie polecenie, jeśli pierwsze zdanie zakończy się pomyślnie. Jak instrukcja if:
Najpierw próbuje, jeśli 1 == 1, jeśli to prawda, sprawdza, czy 2 == 2
źródło
&&
if
testów w bash. Nigdy nie myślałem o tym jak o łańcuchu poleceń porównawczych, które łamią się, gdy któreś z nich zawodzi. Więc mam moje poparcie :)||
polecenia, aby połączyć polecenia, dopóki jedno z nich się nie powiedzie:eei || leu || uie || echo prout3 || echo "never executed"
command_1 && command_2
: wykonaj polecenie_2 tylko po pomyślnym wykonaniu polecenia_1.command_1 || command_2
: wykonaj polecenie_2 tylko wtedy, gdy wykonanie polecenia_1 nie powiodło się.Czuje się podobnie, jak warunek „if” jest wykonywany w głównym języku programowania, np. W
if (condition_1 && condition_2){...}
warunku_2 zostanie pominięty, jeśli warunek_1 jest,false
awif (condition_1 || condition_2){...}
warunku_2 zostanie pominięty, jeśli warunek_1 jesttrue
. Zobacz, to ta sama sztuczka, której używasz do kodowania :)źródło
Gdy program sprawdza, czy polecenie, następnie program tworzy liczbę o nazwie kod wyjścia, jeśli oba warunki są spełnione, kod wyjścia wynosi zero (0), w przeciwnym razie kod wyjścia jest liczbą dodatnią. tylko przy wyświetlaniu Równa, jeśli kod wyjścia jest generowany jako zero (0), co oznacza, że oba warunki są spełnione.
źródło
if [[ ($first_command == "1") && ($two_command == "2") ]];then echo "Equal"; fi