Bagaimana cara mematikan warna dengan `ls`?

50

Biasanya bagus untuk memiliki keluaran warna dari ls,, grepdll. Tetapi ketika Anda tidak menginginkannya (seperti dalam skrip tempat Anda mem-pipkan hasil ke perintah lain) apakah ada saklar yang dapat mematikannya? ls -Gmenyalakannya (dengan beberapa versi yang diturunkan dari BSD ls) jika itu bukan default, tetapi ls +Gtidak mematikannya. Apakah ada hal lain yang bisa?

iconoclast
sumber
4
Terlambat tetapi bagi siapa pun yang mencari: untuk GNU ls dan grepketika memiploskan Anda tidak perlu melakukan apa-apa karena --color=autosudah mematikan pewarnaan ketika outputnya berupa pipa, atau sebenarnya apa pun kecuali tty; itulah yang dimaksud 'otomatis'. Demikian pula FreeBSD ls -Gatau 'CLICOLOR' dinonaktifkan 'jika output tidak diarahkan ke terminal kecuali ... CLICOLOR_FORCE ...'.
dave_thompson_085

Jawaban:

70

Output warna untuk lsbiasanya diaktifkan melalui alias di sebagian besar distro saat ini.

$ alias ls
alias ls='ls --color=auto'

Anda selalu dapat menonaktifkan alias untuk sementara dengan membuatnya awalan dengan backslash.

$ \ls

Melakukan hal di atas akan menyebabkan hubungan pendek alias hanya untuk doa yang satu ini. Anda dapat menggunakannya kapan saja Anda ingin menonaktifkan alias apa pun.

slm
sumber
3
Anda juga bisa menggunakan command ls, tapi ini sedikit lebih cepat.
iconoclast
Trik rapi! Harus memperbarui skrip untuk memimpin ``.
Viet
1
Aku suka itu
Alex Angelico
27

Dengan GNU ls, Anda dapat menentukan ls --color=neveruntuk secara eksplisit menonaktifkan output warna. (Bahkan jika Anda memiliki alias ls='ls --color=auto', ketika Anda menjalankannya ls --color=never, itu akan meluas ke ls --color=auto --color=never, dan opsi selanjutnya diutamakan.)

200_sukses
sumber
1
Ini benar-benar jawaban yang saya cari, tetapi saya akan menjaga jawaban slm sebagai yang dipilih karena menangani kasus-kasus non-GNU, seperti versi yang diturunkan dari BSD (OS X, Solaris, dan tentu saja * BSD).
iconoclast
3

Anda juga dapat menggunakan (seperti pada DOS):

dir

Ini akan menampilkan hasil tanpa warna, Anda dapat menambahkan argumen yang sama ls, seperti -l.

esilence
sumber
2
alias ls=ls

atau

unalias ls

Ini menonaktifkan pewarnaan secara permanen.

Slyx
sumber
3
Tentu saja ini seperti membunuh lalat dengan senapan: Anda kehilangan semua opsi lain yang Anda tambahkan ke lsalias, dan Anda kehilangan mereka untuk seluruh sesi, alih-alih hanya satu perintah.
iconoclast
Itu sebabnya saya mengatakan "secara permanen" :-)
Slyx
2

Di banyak distribusi Linux, ini diaktifkan secara default di pengguna .bashrc.

Edit ~/.bashrcdan hapus garis yang terlihat seperti:

alias ls='ls --color=auto'

Jika Anda ingin menonaktifkan fitur ini untuk semua akun baru yang dihasilkan pada mesin ini di masa mendatang, hapus baris yang sama dari:

/etc/skel/.bashrc 
James Aanderson
sumber
1

Pada Centos7 ini sedang diatur dalam /etc/profile.d/colorls.sh... 3 baris terakhir dari skrip ini adalah:

alias ll='ls -l --color=auto' 2>/dev/null
alias l.='ls -d .* --color=auto' 2>/dev/null
alias ls='ls --color=auto' 2>/dev/null

Jika Anda memiliki keinginan dan izin ... mengomentari baris yang tidak diinginkan harus melakukan trik.

James Gawron
sumber
Atau unalias ls ll ldi dalam diri Anda .bashrcjika Anda tidak memiliki izin
avsej
0

Untuk Mematikan warna: unalias ls

Untuk Mengaktifkan warna: alias ls = 'ls --color = auto'

Untuk menonaktifkan sementara warna: \ ls -ltr

Ravichandran K
sumber
0

Mungkin ada hal lain yang terjadi. lstidak boleh menggunakan warna kecuali jika dianggap terhubung dengan sesuatu yang interaktif. Seharusnya tidak mewarnai hal-hal ketika Anda menyalurkan ke program lain.

Alias ​​pada umumnya adalah ide yang buruk karena Anda tidak pernah dapat menyingkirkan opsi itu dan Anda menjadi terbiasa dengan pengaturan pribadi yang mungkin tidak dapat Anda bawa ke mesin lain yang harus Anda kerjakan. Jika Anda perlu mematikannya untuk menyalurkan ke sesuatu yang lain, gunakan sakelar di dalam pipa itu. Tapi, warna seharusnya tidak ada di pipa.

Untuk ls, lihat apakah Anda mendukung LS_COLORSvariabel lingkungan. The trapd00r / LS_COLORS menunjukkan kepada Anda bagaimana cara kerjanya. Dircolors memungkinkan Anda menyesuaikan warna secara teliti dan per jenis file. Jika Anda tidak menyetel LS_COLORStetapi pewarnaan dihidupkan, lsakan membuat banyak panggilan sistem untuk mengetahui jenis dan atribut file sehingga dapat mengetahui apa yang harus diwarnai. Orang-orang di belakang Sherlock menemukan bahwa pengaturan LS_COLORSdapat menghindari semua itu dan memberikan peningkatan kecepatan 40x . Baca detail berdarah mereka untuk melihat apa yang mereka temukan.

Saya membuat semua jenis file menggunakan warna default:

$ export LS_COLORS='bd=0:ca=0:cd=0:di=0:do=0:ex=0:pi=0:fi=0:ln=0:mh=0:no=0:or=0:ow=0:sg=0:su=0:so=0:st=0:tw=0:'

Inilah file LS_COLORS yang saya masukkan ke dircolors:

BLK                   0
CAPABILITY            0
CHR                   0
DIR                   0
DOOR                  0
EXEC                  0
FIFO                  0
FILE                  0
LINK                  0
MULTIHARDLINK         0
NORMAL                0
ORPHAN                0
OTHER_WRITABLE        0
SETGID                0
SETUID                0
SOCK                  0
STICKY                0
STICKY_OTHER_WRITABLE 0

Untuk grep, lihat apakah dukungan Anda GREP_COLORSatau GREP_OPTIONS.

brian d foy
sumber
Perhatikan bahwa ini masih membuat lsurutan keluaran GNU untuk warna yang dipilih. Bandingkan keluaran ls --color=always | od -adengan ls --color=never | od -adengan pengaturan ini LS_COLORS.
Kusalananda
Trik sebenarnya adalah itu ls | od -atidak memancarkan lolos, dan itulah yang saya inginkan. The lsseharusnya hanya memancarkan urutan yang ketika itu mengirim output ke terminal. Namun, jika Anda mengatakannya, pasti akan melakukannya. Jadi, jangan lakukan itu.
brian d foy
-1

menambahkan pada jawaban @ brian-d-foy, sebagian besar waktu ada warna sederhana yang Anda sukai untuk mengubah misalnya biru yang tidak terlihat dari direktori atau "OTHER_WRITABLE" yang mencolok hijau, jadi mari kita gunakan 24- kami tampilan bit :)

export LS_COLORS='di=04;01;38;5;33:ow=04;01;38;5;33;48;2;60;10;0'

untuk mendefinisikan ulang hanya warna direktori dan warna lainnya yang dapat ditulis

04: underline;
01: bold/brighter;
38;5;33: redifined-blue;
48;2;60;10;0: dark red background

baca lebih lanjut tentang kode ANSI

Danau Iggy
sumber
1
Pertanyaan yang ada adalah tentang menghapus semua warna dari output GNU ls, bukan tentang bagaimana mengubah warna individual.
Kusalananda
ok, bagaimana kalau "mematikan satu warna tertentu dengan 'ls' dengan: export LS_COLORS = 'ow = 00' untuk mematikan hanya OTHER_WRITABLE.
Iggy Lake