Haruskah pesan penggunaan pergi ke stderr atau stdout?


29

Haruskah pesan penggunaan yang dicetak dengan mis

 command -?

dari perintah Unix pergi ke stderr atau stdout, dan mengapa? Haruskah ia pergi ke tempat yang sama jika pengguna melakukan kesalahan dengan suatu opsi?


4
Catatan tambahan: jangan gunakan -? gunakan --help dan -h Karena --help dan -h adalah standar dan karena -? akan dapat diartikan oleh shell.
ctrl-alt-delor

1
@ Richard Ini adalah poin yang sangat bagus. Trik yang menyenangkan (dalam bash): touch -- -l; ls -?- Anda benar-benar mendapatkan daftar panjang seolah-olah Anda telah berpindah -lke ls.
mattdm

@ Richard. Ketika Anda tidak tahu apakah perintah itu menerima opsi panjang bergaya GNU atau mungkin mendukung -hopsi untuk hal lain selain pesan bantuan, maka '-?'(dengan tanda kutip) atau -:memberi Anda peluang bagus untuk mendapatkan pesan kesalahan (dan penggunaan) sejak :dan ?tidak bisa menjadi opsi yang valid untuk apa pun yang menggunakan getopt(3).
Stéphane Chazelas

@Stephane Chazelas. Jika saya memahami komentar Anda dengan benar, Anda menulis dari sudut pandang pengguna suatu program, pertanyaan ini menurut saya berasal dari sudut pandang seseorang yang menulis suatu program.
ctrl-alt-delor

Jawaban:


50

Itu harus pergi ke stdout, sehingga Anda dapat mengetik:

command --help | less

Ini juga direkomendasikan oleh Standar Pengkodean Gnu pada--help .

Di sisi lain, pesan penggunaan yang Anda dapatkan ketika Anda menggunakan opsi yang tidak valid atau menghilangkan argumen yang diperlukan harus pergi ke stderr, karena itu adalah pesan kesalahan, dan Anda tidak ingin itu memberi makan ke perintah berikutnya dalam pipa.

Saat Anda menggunakan --help, pesan penggunaan adalah output normal dan yang diharapkan dari perintah. Oleh karena itu, ia pergi ke stdout, sehingga dapat disalurkan ke perintah lain, seperti lessatau grep.

Ketika Anda mengatakan command --bogus-option | other-command, Anda tidak ingin pesan penggunaan berhenti, karena sekarang output yang tidak diharapkan tidak boleh diproses oleh other-command. Juga, jika output --helplebih dari beberapa baris, maka pesan kesalahan penggunaan hanya boleh berisi ringkasan dari --helpoutput, dan merujuk pengguna ke --helpuntuk rincian tambahan.


1
Agak membingungkan untuk memiliki dua aliran output yang berbeda untuk pesan yang sama tergantung pada sesuatu bukan?

7
Mungkin, tetapi mereka belum tentu pesan yang sama. Jika output --helplebih dari beberapa baris, maka pesan penggunaan yang dihasilkan oleh opsi yang tidak valid harus berupa ringkasan singkat yang mengatakan untuk digunakan --helpuntuk melihat informasi lengkap.
cjm

4
+1 - ini 100% benar, dan saya tidak melihat ada ruang untuk ketidaksetujuan di sini.
simon
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.