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?


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.


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.)


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.


2
alias ls=ls

atau

unalias ls

Ini menonaktifkan pewarnaan secara permanen.


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 

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.


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


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.


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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.