Saya kadang-kadang ingin menyalurkan output kode warna dari suatu proses, misalnya. grep ... tetapi ketika saya menyalurkannya ke proses lain, mis. sed, kode warna hilang ...
Apakah beberapa cara untuk menjaga kode ini tetap utuh?
Berikut adalah contoh yang kehilangan output berwarna:
echo barney | grep barney | sed -n 1,$\ p
command-line
colors
pipe
escape-characters
Peter.O
sumber
sumber
less
dapat menerima input teks berwarna (bagus :) ... misalnya:tree -C ~/ |less -R
atauls -lR --color=always . |less -R
Jawaban:
Banyak program yang menghasilkan keluaran berwarna mendeteksi jika mereka menulis ke TTY, dan mematikan warna jika tidak. Ini karena kode warna mengganggu ketika Anda hanya ingin menangkap teks, jadi mereka mencoba untuk "melakukan hal yang benar" secara otomatis.
Cara paling sederhana untuk menangkap keluaran warna dari program seperti itu adalah menyuruhnya menulis warna meskipun tidak terhubung ke TTY. Anda harus membaca dokumentasi program untuk mengetahui apakah ia memiliki opsi itu. (misalnya,
grep
memiliki--color=always
opsi.)Anda juga dapat menggunakan
expect
skripunbuffer
untuk membuat pseudo-tty seperti ini:sumber
stdout
harus pergi. Saya tidak benar-benar yakin apakahunbuffer
berfungsi ketika Anda memasukkan program ke dalam juga keluar dari itu; Saya belum menginstalnya di sini untuk mencoba.unbuffer
informasinya, ini membantu keluaran bot IRC saya seperti keluaran di shell.Ini bekerja untuk saya; -! (di lingkungan MingW saat ini)
# barney ditampilkan sebagai teks merah
sumber
tree
is colorized a-la dircolors if the LS_COLORS environment variable is set and output is to tty
... Mungkin (?) Ada cara untuk menipu pipa agar berpikir itu adalah keluaran ke TTY .. atau solusi umum semacam itu. .man tree
... Ini juga memiliki opsi serupa,-C
... mungkin itu adalah fitur umum untuk program yang menampilkan kode pelarian warna ..