Unix'teki test komutu çıktı yazdırmıyor


20

Bunu terminale yazdığımda

test 4 -lt 6

Herhangi bir çıktı almıyorum. Neden olmasın? O ya da 1'e ihtiyacım var


1
'Test'in hemen bir değer çıktısı alma seçeneği olsaydı hoş olmaz mıydı? Sadece seçenek. Tüm ihtiyacımız olan bu.
Todd Walton

Yanıtlar:


15

0 veya 1 alırsınız. Çıkış kodunda.

bash-4.2$ test 4 -lt 6

bash-4.2$ echo $?
0

bash-4.2$ test 4 -gt 6

bash-4.2$ echo $?
1

Güncelleme : Çıkış kodunu daha sonra kullanmak üzere saklamak için bir değişkene atamanız yeterlidir:

bash-4.2$ test 4 -lt 6

bash-4.2$ first=$?

bash-4.2$ test 4 -gt 6

bash-4.2$ second=$?

bash-4.2$ echo "first test gave $first and the second $second"
first test gave 0 and the second 1

1
çıkış kodunu oluşturmanın bir yolu var mı?
indieman

3
Hayır. Yalnızca çıktı yeniden yönlendirilebilir. Her neyse, genellikle buna gerek yok. Daha sonra kullanmak üzere saklamak için bir değişkene atamanız yeterlidir. Veya bu değerle niyetinizin tam olarak ne olduğunu bize bildirin.
manatwork

2
Çıkış kodu, $?en azından yürüttüğünüz bir sonraki komutla üzerine yazılana kadar değişkene yerleştirilir .
Shadur

1
Not: Sen kullanabilirsiniz dizi bir boru hattı birden komutların sonuç almak için. tarafından sonucu olacaktır son eğer boru hattı komuta seçeneği kapalı (varsayılan) 'dir. $PIPESTATUS$?pipefail
l0b0

@indieman, çıkış durumuna göre başka bir şey yapmaksa, onu kaydetmenize bile gerek yoktur; sadece kullanınif test 4 -lt 6; then echo test succeeeded; else echo test failed; fi
Wildcard

5

Başka bir yol

test 4 -lt 6 && echo 1 || echo 0

Ancak bu durumda dikkatli olun. Eğer testdöner başarı ve echo 1başarısız echo 0yürütülecektir.


2

Bir çıkış kodu yerine standart çıkışta bir karşılaştırmanın sonucunu istiyorsanız, şu expr(1)komutu kullanabilirsiniz :

$ expr 4 '<=' 6
1

Dikkat edilmesi gereken iki şey:

  1. büyük olasılıkla operatörün birçoğunu kabuk metakarakterleriyle çeliştiği için alıntı yapmanız gerekecektir.
  2. çıkış değeri, dönüş kodunun tersidir test. testtrue için 0 döndürür (çıkış kodları için standarttır), ancak exprtrue için 1 yazdırır.

1
3. vardır testönemli ölçüde daha hızlı (yaklaşık 50 benim makinede kez), mahfaza yerleşik, testve exprgelen yürütülebilir coreutils paketi.
manatwork

İkinci nokta için +1. Bu kadar karışıklık bulmak için çok sinir bozucu bir hata alabilir.
Emanuel Berg

2

Aşağıdaki komutu yazabilirsiniz:

echo $(test -e myFile.txt) $?
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.