Mengapa banyak perintah menyediakan opsi "tenang"?

37

Mengapa banyak perintah menyediakan opsi -qatau --quietuntuk menekan output ketika Anda dapat dengan mudah mencapai hal yang sama dengan mengarahkan output standar ke file null?

August Karlstrom
sumber
3
Saya menganggap itu sebagian besar sebagai bendera kenyamanan.
Janis
7
Tidak semua perintah digunakan -quntuk menekan semua output. Misalnya, Docker memiliki perintah untuk mencantumkan gambar; docker imagesmenunjukkan tabel yang diformat dengan banyak informasi, sementara docker images -qmenampilkan daftar ID gambar yang sederhana (berguna untuk pemipaan ke perintah lain).
new123456

Jawaban:

71
  • Meskipun Anda dapat dengan mudah mengarahkan ulang di shell, ada konteks lain di mana itu tidak semudah, seperti ketika menjalankan perintah dalam bahasa lain tanpa menggunakan shell command-line. Bahkan dalam sebuah shell:

    find . -type f -exec grep -q foo {} \; -printf '%s\n'

    untuk mencetak ukuran semua file yang berisi foo. Jika Anda mengarahkan ulang ke /dev/null, Anda kehilangan keduanya finddan grepoutput. Anda harus menggunakan -exec sh -c 'exec grep foo "$1" > /dev/null' sh {} \;(yaitu, menelurkan shell tambahan).

  • grep -q foo lebih pendek untuk mengetik daripada grep foo > /dev/null
  • Mengarahkan ke /dev/nullberarti output masih ditulis dan kemudian dibuang, itu kurang efisien daripada tidak menulisnya (dan tidak mengalokasikan, menyiapkan output yang akan ditulis)
  • yang memungkinkan optimisasi lebih lanjut. Dalam hal grepmisalnya, karena dengan -q, greptahu output tidak diperlukan, ia keluar segera setelah menemukan kecocokan pertama. Dengan grep > /dev/null, itu masih akan mencoba untuk menemukan semua kecocokan.
  • diam tidak berarti diam . Untuk beberapa perintah, itu berarti mengurangi verbositas (kebalikan dari -v|--verbose). Misalnya, mplayermemiliki a --quietdan a --really-quiet. Dengan beberapa perintah, Anda dapat menggunakan -qqquntuk mengurangi verbositas 3 kali.
Stéphane Chazelas
sumber
Perlu dicatat bahwa di halaman grepmanual kedua opsi -q,, dan -s, disarankan untuk dihindari jika portabilitas menjadi perhatian. grepKeluar awal adalah optimasi penting, tetapi tidak semua program dengan opsi seperti itu dapat melakukannya; curl -smasih akan memproses seluruh data (tetapi poin ke-3 masih berlaku, sehingga menghemat waktu pemrosesan).
Janis
6
@ Janis, itu akan mudah dibawa ke sistem yang sangat lama. Keduanya -qdan -sditentukan oleh POSIX. Jika kita mempertimbangkan sistem yang lama, maka sistem saya sh -c '...' sh {} \;tidak akan berfungsi (dengan s yang kshberbasis sebelumnya sh).
Stéphane Chazelas
Halaman manual menyebutkan: grep gaya USG juga tidak memiliki -q tetapi opsi -snya berperilaku seperti GNU grep. - Saya pikir perbedaan perilaku bisa menjadi masalah. Saya tidak bisa menilai relevansinya.
Janis
Saya sering menggunakan opsi -q dan --quiet ketika saya hanya peduli dengan kode pengembalian suatu perintah dalam sebuah skrip. Alasan yang disebutkan di atas adalah contoh yang lebih baik mengapa.
Mark Stewart
@ StéphaneChazelas: Anda akan kagum betapa banyak bagian dari sistem masih setua itu ... (well, sebenarnya, tidak sebanyak itu ^^ tetapi masih ada beberapa)
Olivier Dulac
3

Itu masih memungkinkan perintah untuk padam ketika dirasa perlu catatan ke layar tetapi biasanya tidak mengeluarkan apa-apa. dengan mengarahkan ulang semua ke nol, tidak ada peluang output terlihat.

LhasaDad
sumber
Well, diam berarti tidak ada respons yang diharapkan; tidak akan terduga jika kita tetap akan melihat output. (Jika ada sesuatu yang "benar-benar sangat" penting untuk dicetak (dalam proses terminal terlampir) perangkat tty / pty dapat langsung digunakan oleh proses. Contoh untuk itu mungkin penyelidikan interaktif kata sandi, atau semacamnya. )
Janis
2

Meskipun mungkin tergantung pada perintah, -qjuga akan menonaktifkan output stderr. Ini memungkinkan cangkang yang tidak dengan mudah memungkinkan stingr pembodohan untuk stdout (saya melihat Anda, csh& tcsh) untuk menghindari kebisingan.

Beberapa program menyediakan opsi "sunyi" untuk situasi di mana ia mungkin memiliki output bermakna lainnya yang Anda tidak ingin berantakan dengan pesan status. The -qatau setara akan membungkam semua keluaran status program, yang memungkinkan aliran data murni dari, katakanlah, taratau gzip.

Joe Sewell
sumber
0

Selain semua tanggapan dan poin yang baik di atas. Ini adalah praktik terbaik untuk memberikan opsi yang berlawanan untuk setiap bendera. Jadi, jika ada -v untuk verbositas harus ada -q untuk non-verbositas, cukup atau diam. (ini bukan titik diskusi tetapi ...) Sama seperti seharusnya menjadi pilihan panjang untuk setiap yang pendek, -q dan --quite.

Seperti dalam hampir semua hal dalam bisnis kita, ada banyak cara untuk mendapatkan solusi atau hasil yang sama. Memiliki -q adalah salah satunya.

Johandry
sumber