$ 'In anlamı nedir? Bir kabuk komut dosyasında?


Yanıtlar:



26

Cjm'in cevabı doğrudur, ancak $?kabuk komut dosyalarında saçma bir şekilde kullanılabilir ve buna karşı uyarmak istiyorum. Çok sayıda hatalı kabuk komut dosyası, tekrarlanan bir kod düzenine sahiptir:

run_some_command
EXIT_STATUS=$?

if [ "$EXIT_STATUS" -eq "0" ]
then
    # Do work when command exists on success
else
    # Do work for when command has a failure exit
fi

Mümkünse (okunabilirlik endişeleri bazen zorlanabilir), bu durumu farklı şekilde kodlamalısınız:

if run_some_command
then
    # Do work when command exists on success
else
    # Do failure exit work
fi

Bu son kullanım daha hızlıdır, kabuğun değişken ad alanını geçici değişkenler için ne kadar tutar ile kirletmez, insanlar için genellikle daha okunaklı olabilir ve bilişsel olmayan koşulsuz yazma uygulaması olan "pozitif mantık" kullanımını teşvik eder. çoğu durumda basitlik. Çoğunlukla kullanımı ile uzakta $?.


5
Yalnızca 0 veya 1'den daha fazla olasılık varsa, daha karmaşık sözdizimi gereklidir - programlar genellikle yararlı bilgiler çıkış kodları aracılığıyla iletir. Ayrıca, bu değeri daha sonra kodda tekrar kullanmanız gerekirse (örneğin, günlüğe kaydetme için) kullanışlıdır.
mattdm

3

Cjm'nin söylediğine ek olarak , değeri $?0 ise, önceki işlem normal şekilde sona erdi (veya başarıyla). Aksi takdirde bazı hatalar oluştu.


8
Her zaman bir hata sinyali vermez. diffEğer karşılaştırılan dosyalar aynı ise 0 ile, farklı ise 1 ile çıkar ve 2 hata verir.
Shawn J. Goff

2
Bu asla hata olduğunu gösterir. Bu sadece önceki komutun çıkış durumu. "0 ise normal çıkış" olayı bir kongredir (EXIT_SUCCESS / EXIT_FAILURE)
aviraldg

3

$?-Yapılan son komutun çıkış durumu.

$0Geçerli komut dosyasının dosya adı.

$#Bir betiğe verilen argüman sayısı.

$$-Geçerli kabuğun işlem numarası. Kabuk komut dosyaları için bu, altında işlem yaptıkları işlem kimliğidir.


0

, $? İstendiğinde son çalıştırma komutunun yürütme durumunu bize bildirin. '0' değeri komutun başarıyla yürütüldüğünü ve '1' ifadesinin başarısız olduğunu gösterir.


2
Yalnızca etkileşimli istemlerde değil, komut dosyalarında da ve sıfır olmayan herhangi bir değer başarısızlık anlamına gelir.
Kusalananda

-3

$?yürütülen komutun çıkış durumunu belirler. $ardından sayılar (örneğin $1, $2vb.) kabuk betiğindeki parametreleri temsil eder.


Doğru cevabı okumak isteyebilirsin ...
jasonwryan
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.