Tidak ada keluaran berwarna dalam lebih sedikit untuk perintah ls

21

Jika saya menjalankan, lssaya mendapatkan keluaran berwarna yang menurut saya cukup mudah untuk dengan cepat melihat jenis file tersebut. Ketika saya mencoba untuk pipa lessbahkan dengan bendera -rdan -Rwarna selalu hilang. Saya menggunakan zshversi 5.0.7. Ada ide? Terima kasih.

sunting: Saya menggunakan OS X.

nunos
sumber
Bisakah Anda mengonfirmasi lssedang dipanggil --color? Coba menangguhkan pipa ( ^Z) atau menggunakan psdari terminal lain. Output apa yang which lsdihasilkan?
zackse
Saya membersihkan ini dari antrian dekat karena OP telah dengan jelas menyatakan bahwa mereka menggunakan less -rsehingga bukan masalah dengan lesstetapi denganls
terdon
Saya terkejut bahwa ini belum merupakan duplikat, tetapi yang paling dekat yang saya dapat temukan adalah output perintah Store dalam variabel , dan itu pada Super User.
Scott
@Scott Saya tidak yakin apakah ada duplikat yang tepat, tetapi ada beberapa pertanyaan yang jawabannya sangat mirip ( lshasilnya tergantung pada stdout). Yang saya ingat adalah unix.stackexchange.com/questions/157285/... yang itu sendiri ditandai sebagai duplikat unix.stackexchange.com/questions/10421/…
jimmij
@jimmij Tapi pertanyaan-pertanyaan itu tidak menyebutkan bahwa itu ls --color=autoberarti menggunakan warna hanya ketika menulis ke terminal (yaitu, ketika output standar adalah terminal), dan bukan ketika itu file atau pipa.
Scott

Jawaban:

21

Ini sesuai rancangan: program yang menghasilkan keluaran berwarna biasanya hanya melakukannya ketika keluarannya masuk ke terminal, bukan ketika dikirim ke pipa atau ke file biasa. Alasannya adalah bahwa data yang dikirim pada terminal mungkin dibaca oleh manusia, sedangkan data yang disalurkan ke program atau ditulis ke file kemungkinan akan diuraikan oleh beberapa program, sehingga tidak boleh mengandung konten asing seperti urutan pelepasan yang berubah warna. .

GNU lsmenampilkan keluaran berwarna pada terminal saat Anda melewati opsi --color(atau --color=auto). Untuk memaksakan keluaran berwarna terlepas dari jenis file keluaran standar, lewati --color=alwaysatau --color=yes(mereka sinonim). Konvensi ini telah diikuti oleh perintah lain, seperti GNU grep, FreeBSD grep git diff,, dll.

ls --colors=yes -l | less

Dengan versi FreeBSD ls(juga ditemukan di OSX, dan tersedia sebagai colorlsport pada OpenBSD dan NetBSD), berikan opsi -Guntuk menampilkan warna ketika output adalah terminal. Atur lingkungan CLICOLOR_FORCEuntuk menampilkan warna terlepas dari jenis file output.

CLICOLOR_FORCE=1 ls -l | less
Gilles 'SANGAT berhenti menjadi jahat'
sumber
20

Masalah yang paling mungkin adalah bahwa lsprogram Anda telah menetapkan opsi --color=autoyang pada dasarnya berarti bahwa output harus diwarnai hanya jika terhubung ke terminal, jika tidak (output terhubung ke pipa atau file) tidak ada warna yang dipancarkan.

Jika Anda ingin memiliki warna, Anda harus mengatur --coloropsi always, jadi cobalah

ls --color=always | less -R

Jika perilaku ini seperti yang Anda harapkan sepanjang waktu, buat saja alias:

alias ls='ls --color=always'
jimmij
sumber
Dalam pengaturan saya, bash versi 4.3, --color adalah opsi ilegal .. Grepping untuk "color" memberi tahu saya tentang opsi "-G" tetapi tidak mengatakan apa-apa tentang opsi otomatis atau selalu. Ada ide?
nunos
5
@nunos lstidak berasal bash, ini adalah program mandiri. Jalankan ls --versionuntuk memeriksa versinya. Milik saya adalah GNU coreutils) 8.21 .
jimmij
@jimiij lsversi saya tidak memiliki --versionbendera. Saya menggunakan yang standar dari OS X, tidak yakin apakah itu membantu.
nunos
@nunos tolong selalu sebutkan sistem operasi Anda. Ada perbedaan besar antara Linux dan non-GNU nixes seperti OSX.
terdon
0

Saya tidak dapat mengomentari jawaban @jimmij, karena saya memiliki kurang dari 50 perwakilan, tetapi saya ingin menjelaskan apa yang berhasil untuk saya di Bash.

Jika Anda berlari

$ man ls | grep color

Anda akan melihat semua entri- manhalaman untuk lingkungan shell spesifik Anda (dalam kasus kami bash).

Bagi saya penyesuaian berikut berguna:

$ alias ls='ls -G'
titus.andronicus
sumber
3
Itu berhasil untuk apa? The -Gbendera tidak ada hubungannya dengan bagaimana lsmengelola keluaran berwarna. Itu hanya menghapus grup dari output ls -l. Itu mempengaruhi output warna dalam BSD ls (yang digunakan pada OSX juga), apakah itu yang Anda maksud? Bagaimanapun, saya tidak berpikir itu akan menunjukkan warna ketika diarahkan ke file, itu hanya akan menunjukkan warna pada baris perintah.
terdon