Gdybym chciał uruchomić dwa osobne polecenia w jednym wierszu, mógłbym to zrobić:
cd /home; ls -al
albo to:
cd /home && ls -al
I otrzymuję te same wyniki. Co jednak dzieje się w tle z tymi dwiema metodami? Jaka jest funkcjonalna różnica między nimi?
;
jest naprawdę niebezpieczne (przynajmniej z poleceniem rm)cd /some/dir; rm -fr ./*
. Tak więc przy tak niszczycielskim działaniu musisz mieć pewność, że jesteś we właściwym miejscu przed uruchomieniem rm. Prawidłowe polecenie tocd /some/dir && rm -fr ./*
jeśli a zwraca zerowy kod wyjścia, to b jest wykonywane.
jeśli a zwraca niezerowy kod wyjścia, to b jest wykonywane.
a jest wykonywane, a następnie b jest wykonywane.
źródło
Działa
ls
w bieżącym katalogu, ponieważcd /fakedir
zawiedzie, a powłoka zignoruje status wyjścia, który nie jest równy zero.Ponieważ
&&
operator będzie kontynuował działanie tylko wtedy, gdy poprzednie polecenie zakończyło się normalnie (stan zero), żadnals
operacja nie zostanie wykonana.Istnieją inne operatory, takie jak te,
&
które będą stanowić tło procesu. Choć często umieszczany na końcu polecenia, może być umieszczony w środku łańcucha.źródło
Możesz także łączyć je ze sobą jak
if..then..else
w logice poleceń do łączenia łańcuchów.przykład:
źródło