İki ampersand ile yarım kolonun bashta nasıl çalıştığı arasında bir fark var mı?


71

Bir satırda iki ayrı komut çalıştırmak isteseydim, bunu yapabilirdim:

cd /home; ls -al

veya bu:

cd /home && ls -al

Ve aynı sonuçları alıyorum. Ancak, bu iki yöntemle arka planda neler oluyor? Aralarındaki fonksiyonel fark nedir?

Yanıtlar:


88

;Sadece diğerinden bir komut ayırır. Bir &&önceki başarılı olsaydı sadece aşağıdaki komutu çalıştırın diyor

cd /home; ls -al

Bu cd /home, cdkomutun başarısız olmasına rağmen ( /homeyoksa, onu geçme izniniz yok vb.) Çalışacaktır ls -al.

cd /home && ls -al

Bu sadece başarılı ls -alolsaydı çalışır cd /home.


2
kullanımı ; , örneğin (en azından rm komutuyla) gerçekten tehlikelidir cd /some/dir; rm -fr ./*. Bu yüzden, bu kadar yıkıcı bir operasyonla rm'yi çalıştırmadan önce doğru yerde olduğunuzdan emin olmalısınız. Doğru komutcd /some/dir && rm -fr ./*
ALex_hha 18:16

70
a && b

Eğer bir döner çıkış kodu sıfır, daha sonra b yürütülür.

a || b

Eğer bir sıfır olmayan çıkış kodu verir, daha sonra b yürütülür.

a ; b

a yürütülür ve ardından b yürütülür.


16
cd /fakedir; ls -al

lsGeçerli dizinde çalışır çünkü cd /fakedirbaşarısız olur ve kabuk sıfır olmayan çıkış durumunu yok sayar.

cd /fakedir && ls -al

Çünkü &&önceki komutu normal (sıfır durumunu) çıkıldı eğer operatör sadece devam edecek, hiçbir lsişlem yapılacaktır.

&Bir süreci arka planlayan gibi başka operatörler de vardır. Genellikle komutun sonuna yerleştirilirken, bir zincirin ortasına konulabilir.


4

Ayrıca bir if..then..elsezincirleme komut mantığı gibi onlara da katılabilirsiniz .

örnek:

ls file.ext && echo "file exists" || echo "file does not exist"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.