W tutorialach i instrukcjach często widzę łączone polecenia. Na przykład,
sudo apt-get update && sudo apt-get install pyrenamer
Wydaje się, że cztery możliwe złącza: &
, &&
, ||
i ;
. Chociaż &
złącze jest dla mnie jasne (wysyła proces do tła i pozostawia terminal dostępny), nie jest jasne, jaka jest różnica między &&
i ;
. I nie wiedziałem o tym, ||
dopóki komentarz Kaya nie był.
Poniższe pytania dotyczą różnicy między dwoma złączami, ale najczęściej w komentarzach:
Oto kilka powiązanych pytań:
- Jaka jest różnica między
;
i&&
? - Kiedy należy ich odpowiednio używać ? Przyjemnie byłoby zobaczyć kilka przypadków użycia: jeśli chcę uruchomić polecenie, a następnie po jego zamknięciu komputera, które złącze wybrać?
- Jakie są ich zalety i niebezpieczeństwa ? Robie Basak wspomina w komentarzu do tej odpowiedzi, że na przykład polecenie
cd /somewhere_else; rm -Rf *
może mieć destrukcyjne konsekwencje, jeśli na przykład zawiedzie pierwszy element w łańcuchu poleceń. - Jeśli dotyczy, skąd pochodzą?
set -e
spowoduje zatrzymanie skryptu w przypadku awarii, tak jakby wszystkie polecenia były połączone &&
.
||
jest to samo,&&
z wyjątkiem tego, że wykonuje drugie polecenie tylko wtedy, gdy pierwsze zakończyło pracę z niezerowym (nieudanym) statusem.