Apa efek auto
yang dimiliki opsi untuk --color
switch pada grep? Kapan grep memutuskan untuk mewarnai string yang cocok, dan kapan bukan?
sumber
Apa efek auto
yang dimiliki opsi untuk --color
switch pada grep? Kapan grep memutuskan untuk mewarnai string yang cocok, dan kapan bukan?
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=auto
itulah 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 TERM
biasanya tidak didefinisikan. Solusi mudah untuk masalah ini adalah mengatur TERM=windows
di 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 TERM
tidak harus ditetapkan (hanya tidak bisa dumb
).
sdgstd.h
,istty(stdout)
kembali0
jika output diarahkan ke file.grep
danless
dari proyek GnuWin (gnuwin32.sourceforge.net).cmd.exe
ditingkatkan denganansicon
utilitas.less --color=auto
berfungsi seperti yang diharapkan: menggunakan warna saat tidak ada redirection yang diterapkan dan tidak ketika output diarahkan. Tetapigrep --color=auto
tidak mencetak urutan melarikan diri dalam kedua kasus.