ls -l --color=auto | tee output.log
Tanpa pipa / tee warnanya. Bagaimana saya bisa membuatnya agar tetap berwarna saat menggunakan tee
(hanya bisa diwarnai di layar, saya tidak peduli tentang warna dalam log).
ls -l --color=auto | tee output.log
Tanpa pipa / tee warnanya. Bagaimana saya bisa membuatnya agar tetap berwarna saat menggunakan tee
(hanya bisa diwarnai di layar, saya tidak peduli tentang warna dalam log).
Jawaban:
Cukup masukkan unbuffer
sebelum perintah apa saja untuk membuatnya berpikir itu menulis ke output interaktif bahkan jika itu sebenarnya piping ke executable lain. Ini akan mempertahankan warna dalam kasus ls
.
Sebagai contoh
unbuffer ls -l --color=auto | tee output.log
Jika Anda belum menginstalnya, pada Ubuntu dan distribusi Linux Debian-ish lainnya Anda dapat menginstal unbuffer
dengan melakukan.
sudo apt-get install expect-dev
xcodebuild
- sebagai gantinya saya mendapat garis cincang tanpa warna. unbuffer xcodebuild | less -R
Namun, bekerja dengan sempurna.
expect-dev
paket itu. expect
cukup.
Gunakan opsi ls --color=always
--color=auto
tidak akan mewarnai output ke pipa - untuk alasan yang jelas.
Halaman utama mengatakan sebagai berikut:
Dengan --color = auto, kode warna hanya keluaran jika keluaran standar terhubung ke terminal (tty).
ls -l
hanyalah sebuah contoh. Saya memiliki perintah yang sama sekali berbeda (log heroku) yang menghapus warna saat disalurkan ke tee
. Dan saya ingin "memperbaiki / mengubah" tee / pipa, bukan perintah yang saya jalankan.
ls
. Lihat jawaban saya yang memperbaiki masalah untuk semua program, termasuk log heroku.
Saya akan memperluas script
solusi yang diberikan dalam komentar dari jawaban yang diterima. Menggunakan script
mungkin berguna jika Anda tidak bisa atau tidak ingin menginstal paket harapan yang berisi unbuffer
perintah.
Cetak ls
output ke stdout dan file dengan kode warna :
script -efq output.log -c "ls -l --color=auto"
dimana ( man script
):
-e, --return Return the exit code of the child process. Uses the same format as bash termination on signal termination exit code is 128+n. -f, --flush Flush output after each write. This is nice for telecooperation: one person does `mkfifo foo; script -f foo', and another can supervise real-time what is being done using `cat foo'. -q, --quiet Be quiet (do not write start and done messages to either standard output or the typescript file).
Lihat file keluaran dengan warna:
less -r output.log
-e
sama dengan --return
- tidak perlu untuk keduanya; -efq
adalah --return --flush --quiet
.