Kullanım mesajı stderr'e mi yoksa stdout'a mı gitmeli?


29

Basılmış kullanım mesajı

 command -?

Unix komutunun adı stderr veya stdout'a gidiyor ve neden? Kullanıcı bir seçenekle yanlış yaparsa aynı yere mi gitmeli?


4
Ek not: kullanmayın -? kullanımı --help ve -h Çünkü --help ve -h standart ve çünkü -? Kabuk tarafından yorumlanabilir.
ctrl-alt-delor

1
@ richard Bu mükemmel bir nokta. Eğlenceli numara (bash'ta): touch -- -l; ls -?- aslında ls'e geçmiş gibi uzun bir listeye sahipsin -l.
mattdm

@richard. Komutun GNU stili uzun seçenekleri kabul edip etmediğini veya -hbir yardım mesajından başka bir seçeneği destekleyip desteklemediğini bilmiyorsanız , '-?'(tırnak işaretleri ile) veya -:size bir hata (ve kullanım) mesajı alma şansı verin. :ve ?kullanan hiçbir şey için geçerli seçenekler olamaz getopt(3).
Stéphane Chazelas

@Stephane Chazelas. Yorumunuzu doğru anlarsam, bir programın kullanıcısı perspektifinden yazıyorsunuzdur, bence bu soru program yazan birinin bakış açısıyla.
ctrl-alt-delor

Yanıtlar:


50

Stdout'a gitmesi gerekir, böylece şunu yazabilirsiniz:

command --help | less

Bu aynı zamanda Gnu Kodlama Standartları--help tarafından da önerilmektedir .

Öte yandan, geçersiz bir seçenek kullandığınızda veya gerekli bir argümanı atladığınızda aldığınız kullanım mesajı stderr'e gitmelidir, çünkü bu bir hata mesajıdır ve bunun bir boru hattında bir sonraki komuta beslenmesini istemezsiniz.

Kullandığınızda --help, kullanım mesajı komutun normal ve beklenen çıktısıdır. Bu nedenle stdout'a gider, yani lessveya gibi başka bir komuta gönderilebilir grep.

Derken command --bogus-option | other-commando tarafından işleme edilmemelidir beklenmedik çıkışı artık, çünkü sen, kullanım mesajı Stdout'a gidiş istemiyoruz other-command. Ayrıca, çıktısı --helpbir avuç satırdan daha fazlaysa, kullanım hatası mesajı yalnızca --helpçıkışın bir özetini içermeli ve --helpek ayrıntılar için kullanıcıyı yönlendirmelidir .


1
Bir şeye bağlı olarak aynı mesaj için iki farklı çıktı akışına sahip olmak biraz kafa karıştırıcı değil mi?

7
Belki, ama mutlaka aynı mesaj değillerdir. Eğer çıktısı --helpbirkaç satırdan fazlaysa, geçersiz bir seçenek tarafından üretilen kullanım mesajı --helptam bilgiyi görmek için kullanılacak kısa bir özet olmalıdır .
cjm

4
+1 - Bu% 100 doğru ve burada hiçbir anlaşmazlık için oda göremiyorum.
simon
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.