Neden olduğu konusunda kafam karıştı “| true "ifadesi" || "ile aynı etkiye sahiptir doğru"


13

Bir dosyayı kaldırmadan önce bir hizmeti durdurduğum bir makefile var. Hizmeti durduramadığında hataya neden olur. Bu açıkça istenmeyen yani eklemek istiyorum || trueama özledim düşündüm |. Gerçekleştirmek:

stop service foo | true
rm /etc/init/foo.conf

Bunun neden çalıştığını ve neler olduğunu karıştırıyorum. Bu truesadece bir anahtar kelime değil, bir uygulama anlamına mı geliyor ? Bunlar aynı mı? Kullanmak için iyi bir neden var mı | true?

Yanıtlar:


16

trueve falseolan coreutils (aynı zamanda tipik yerleşik ins kabuk) sadece o davranışı ihtiyacınız başına durumlar için, 0 ve non-return 0 olduğunu. Man sayfalarından:

true - hiçbir şey yapma, başarıyla
yanlış - hiçbir şey yapma, başarısız

Yani çıktıyı stop service fooiçine boru haline getiriyorsunuz true, bu onu yok sayar ve 0 döndürür. Teknik olarak çalışır, ancak muhtemelen kullanmalısınız, || trueböylece niyetinizin ne olduğu açıktır; çıktıyı kullanmayan bir programa aktarmak için gerçekten hiçbir neden yok


4
Mantıklı gelir. :) Neden bilmiyorum ama "hiçbir şey yapmadan, başarısız" okumak . beni güldürüyor.
Kit Sunde

9
Kaçınılması gereken başka bir neden | true, komut boru tamponunu doldurmak için yeterli çıktı ürettiğinde, trueokumayı beklemeyi engellemesidir .
cjm

3
@cjm ya da SIGPIPE nedeniyle ölmek
Andy

6
@Kit: Aynı şeyi yapmayacağınızı foo || trueve foo | trueyapmayacağınızı unutmayın : foo || trueçıktıyı gösterecektir foo, oysa foo | trueher şeyin foostandart çıktısına yazdığı (ve foodaha SIGPIPEönce belirtildiği gibi ölmesi veya engellenmesi muhtemeldir ).
Gilles 'SO- kötü olmayı kes'

Bu cevap "muhtemelen" kelimesi dışında mükemmeldir ...!
Sam Watkins
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.