Jawaban:
Dengan --color=auto, grep akan menyoroti string yang cocok jika (dan hanya jika) output ditulis langsung ke terminal dan terminal tersebut mampu menampilkan output berwarna.
Biasanya, --color=autoitulah yang Anda inginkan. Jika, misalnya, Anda menggunakan grep untuk mencocokkan URL dan mengirimkannya ke Wget, Wget akan melihat \e[1;31mhttp://...alih-alih URL yang sebenarnya (dan mencekiknya).
Perintah berikut ini akan menghasilkan keluaran berwarna:
echo Super User | grep --color=auto Super
echo Super User | grep --color=always Super | cat
Namun, perintah ini seharusnya tidak:
echo Super User | grep --color=auto Super | cat
Setiap ketidakkonsistenan dengan perilaku ini harus dianggap sebagai bug.
Dengan --color=auto, versi Grep for Windows terbaru (2.5.4) - serta 2.5.4 yang asli didasarkan pada - warna output jika dan hanya jika kondisinya
isatty(STDOUT_FILENO) && getenv("TERM") && strcmp(getenv("TERM"), "dumb")
benar, yaitu, jika dan hanya jika output sedang ditulis ke terminal, variabel lingkunganTERM didefinisikan dan terminal tidak bodoh .
Ini tidak akan menghasilkan perilaku yang diinginkan di bawah Windows, karena TERMbiasanya tidak didefinisikan. Solusi mudah untuk masalah ini adalah mengatur TERM=windowsdi panel kontrol.
Versi terbaru dari grep (2.14) memperbaiki masalah ini dengan mewarnai keluaran jika dan hanya jika kondisinya
isatty(STDOUT_FILENO) && should_colorize()
benar, di mana should_colorize()didefinisikan berbeda untuk POSIX dan Win32:
Untuk yang pertama, kondisinya setara dengan yang ada di 2.5.4; untuk yang terakhir, variabel lingkungan TERMtidak harus ditetapkan (hanya tidak bisa dumb).
sdgstd.h, istty(stdout)kembali 0jika output diarahkan ke file.
grepdan lessdari proyek GnuWin (gnuwin32.sourceforge.net). cmd.exeditingkatkan dengan ansiconutilitas. less --color=autoberfungsi seperti yang diharapkan: menggunakan warna saat tidak ada redirection yang diterapkan dan tidak ketika output diarahkan. Tetapi grep --color=autotidak mencetak urutan melarikan diri dalam kedua kasus.