Apa arti opsi --color = auto untuk GNU grep?


14

AFAICT, baik halaman manual untuk GNU grep, maupun info grep, berkenan untuk menguraikan apa --color=autoartinya.

Saya harus menjadi salah satu dari sedikit orang di planet ini yang makna dari opsi ini tidak segera jelas.

Saya menduga bahwa --color=auto"di suatu tempat di antara" --color=neverdan --color=always, tapi itu masih menyisakan terlalu banyak yang tidak ditentukan.

Jawaban:


14

Aturannya sama seperti untuk ls, yang melakukan pekerjaan yang lebih baik dalam mendokumentasikannya man ls. Mengutip:

Menggunakan warna untuk membedakan jenis file dinonaktifkan secara default dan
dengan --color = tidak pernah. Dengan --color = auto, ls memancarkan kode warna hanya ketika
output standar terhubung ke terminal.
Variabel lingkungan LS_COLORS dapat mengubah pengaturan. Gunakan perintah dircolors untuk mengaturnya.

Jadi itu akan membuat perintah hanya menambahkan pemformatan warna ketika output pergi ke terminal dan tidak, katakanlah, ketika pergi ke pipa di mana program yang mengkonsumsi pipa mungkin tidak menangani pemformatan warna dengan baik.


3
Yup, saat-saat utama saya mengalami hal ini adalah kurang. Jika Anda menggunakan, less -RAnda bisa mendapatkan sorotan pertandingan tetapi Anda harus menentukan --color=alwaysagar grep itu berfungsi.
Holloway

10

Karena grepmerupakan program GNU, pilihan lain mungkin melihat kode sumbernya.


Grep internal menguji static int color_optionapakah 0, 1atau 2.

  • 0 tidak pernah menggunakan keluaran berwarna
  • 1 selalu menggunakan warna
  • 2 hanya menggunakan warna saat mencetak ke terminal

Sekarang ketika Anda menyerahkan --color=autoke grep sebagai argumen pada CLI Anda, secara internal menetapkan variabel color_optionuntuk 2.

Jika color_optionsama 2 grepmaka tes lebih lanjut apakah STDOUTterkait dengan terminal atau pengguna dinonaktifkan melalui colokan berwarna shell environment variables. Jika yang pertama adalah benar dan keluaran berwarna diijinkan, grepkemudian lanjutkan dengan mengevaluasi warna mana yang harus digunakan dan pada akhirnya mencetak ke CLIdalam warna Anda.


sumber: (grep 2.21)

grep.c line 306, 2374, 2440
colorize-posix.c line 36
man isatty 
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.