Memipis keluaran ls atau tree ke warna yang kurang hilang?

12

treedan lsdapat membedakan jenis file dengan mewarnai nama file secara berbeda.

treedan lssering menampilkan daftar panjang file (termasuk direktori), jadi saya mengirim output stdout ke less.

Tetapi lesstidak mempertahankan warna. Bagaimana kita membuatnya menunjukkan warna, atau beberapa cara alternatif?

Baru saja melihat daftar tertaut, tetapi pipa ke less -Ratau less -rtidak berfungsi. OS saya adalah Ubuntu 12.04. lessadalah Versi 444: 09 Jun 2011.

Tim
sumber
1
@ JosephephR. pertanyaan lainnya setengah terkait tetapi bukan duplikat. Di sini kita berbicara ls(bukan tree) yang beberapa implementasinya perlu diberitahukan untuk memaksakan keluaran warna ketika keluaran tidak pergi ke terminal (selain less -Rdibutuhkan)
Stéphane Chazelas
Sudahkah Anda mencoba tree -C | less -R? The -Cpilihan adalah setara pohon kurang ini --color=always, saya pikir (setidaknya itu bekerja untuk saya, pada Ubuntu 12.04).
steeldriver
@steeldriver terima kasih. berhasil. treedengan dan tanpa -Csendiri selalu menghasilkan warna, tetapi mengapa mereka berbeda saat digunakan dengan less?
Tim
@Tim 2 alasan: 1. lessmenghapus warna secara default kecuali Anda memberikannya -Rpilihan, yang memerintahkannya untuk membiarkannya masuk, dan 2. treedan lsdan program lain biasanya mematikan pewarnaan ketika mereka mendeteksi output mereka pergi ke program lain (seperti less) daripada langsung ke terminal Anda, kecuali Anda memaksakan pewarnaan dengan -Catau --color=always.
jw013
2
Apa daftar tertaut yang Anda tulis?
Anthon

Jawaban:

15

Saya akan menganggap Anda menggunakan ls --color=auto, yang memberitahu lsuntuk menggunakan warna dalam mode 'otomatis'. Mode 'Otomatis' memberi tahu lessuntuk melihat apakah STDOUT adalah terminal, dan jika demikian, gunakan warna, jika tidak jangan gunakan warna. Ketika Anda pipa lske less, STDOUT bukan terminal, itu terhubung ke STDIN less, yang merupakan pipa normal.

Solusinya, gunakan ls --coloratau ls --color=always.

Namun sekarang ini mengarah ke masalah potensial lain. Tergantung pada Anda less, itu mungkin tidak menunjukkan warna, tetapi menunjukkan kode melarikan diri sebagai gantinya. Solusinya adalah menggunakan less -R. Ini memberitahu lessuntuk melewati kode melarikan diri untuk lolos warna ANSI. Anda tidak ingin menggunakan -rkarena ini akan menyebabkan masalah dengan garis panjang yang membungkus, karena kurang tidak menghitung panjang garis dengan benar.

Solusi yang sangat lengkap:

ls --color | less -R

Demikian pula untuk tree:

tree -C | less -R
Patrick
sumber