2017-11-09 91 views
5

internette kullanılan aşağıdaki bash ifadeyi görünce:Bu bash deyimindeki fikir nedir (command || true)?

PYTHON_BIN_PATH=$(which python || which python3 || true) 

Ben which python başarısız olursa, o zaman which python3 yürütülecek anlıyorum ama sonunda true amacını anlamıyorum şart. Herhangi bir fikir?

cevap

2

deneyin koşu: Sen RC=0 alacak

which python_bla || which python3_bla_bla || true 
echo $? 
0 

(bla unutmayın). Bir sonraki komuta başarıyla geçmek için bir yapı anlamına gelir. Burada python_bla veya python3_bla_bla yok biliyorum, ama yine de komut rc=0 Örnek verdi: üç komutları aşağıdakilerden RC Kontrol, ben yanlış için date komuta yazımını değişti ama true0 kalması RC neden oluyor.

date;echo $? 
Thu Nov 9 01:40:44 CST 2017 
0 
datea;echo $? 
If 'datea' is not a typo you can use command-not-found to lookup the package that contains it, like this: 
    cnf datea 
127 
datea||true;echo $? 
If 'datea' is not a typo you can use command-not-found to lookup the package that contains it, like this: 
    cnf datea 
0 

Not:

command || : 
-1

Her ikisi de which başarısız olursa, hiçbir şey için PYTHON_BIN_PATH ayarlamaktır.

Gözle görülür yalnız şeyler daha belirgin hale getirir

PYTHON_BIN_PATH=$(which python || which python3 || true) 

ve

PYTHON_BIN_PATH=$(which python || which python3) 

Ama komutu çalıştırarak arasında hiçbir fark yoktur. Python'un sistemde mevcut olmadığını varsayalım. sonunda true kullanarak Kısacası

$(which python || which python3) 
echo $? #Returning the exit status of the previous command 
1 # A non zero status generally means the previous statement failed 
$(which python || which python3 || true) 
echo $? 
0 

, hep Basit

$(command || true) 
0

için sıfır çıkış durum verir. Sisteminizin kutu pythonundan (O.S ile gelen python sürümünden) ya da içinde python sürüm 3'ün bulunup bulunmadığını kontrol edecektir. Ayrıca, python'un yürütülebilir yolunu da doğrulayacaktır, PYTHON_BIN_PATH isimli değişkeni echo "$PYTHON_BIN_PATH" yaparak basabilir ve bir kez de kontrol edebilirdiniz.

DÜZENLEME: İşte anlamak için basit bir örnek. en biz BOŞ değeri ile val adında bir değişken var ve biz bunu diyelim: herhangi bir çıktı vermedi önceki komut olduğu gibi

echo $val || true 

Çıktı sonra NULL olacaktır. Diyelim ki val=4 var, sonra aşağıdaki gibi çalıştırıyoruz.

val="4" 
echo $val || true 
4 
+0

Evet, ama 'TRUE sordum. –

+0

hangi python' söyler 'gelmiyor mu? piton versiyonu – bhansa

+0

@EladWeiss, şimdi benim düzenlemeyi hesap lütfen. – RavinderSingh13

1

sanırım daha titiz olmak gerekirse: Aynı results.Example almak yerine true : operatörünü kullanabilirsiniz.örneğin

:

aaa bir var küresel ikili dosya değilse. which aaa komuttan sonra, echo $? yürütebileceği ve sonuç 1 olduğunu.

Ama which aaa | true yürütmek eğer sonuç 0 olacaktır.