Saya menghabiskan sebagian besar waktu saya bekerja di lingkungan Unix dan menggunakan emulator terminal. Saya mencoba menggunakan warna pada baris perintah, karena warna membuat output lebih berguna dan intuitif.
Opsi apa yang ada untuk menambahkan warna ke lingkungan terminal saya? Trik apa yang Anda gunakan? Perangkap apa yang Anda temui?
Sayangnya, dukungan untuk warna bervariasi tergantung pada jenis terminal, OS, pengaturan TERM, utilitas, implementasi buggy, dll.
Berikut adalah beberapa tips dari pengaturan saya, setelah banyak percobaan:
- Saya cenderung mengatur
TERM=xterm-color
, yang didukung pada sebagian besar host (tetapi tidak semua). - Saya bekerja pada sejumlah host yang berbeda, versi OS yang berbeda, dll. Saya menggunakan semuanya dari macOS X, Ubuntu Linux, RHEL / CentOS / Scientific Linux dan FreeBSD. Saya mencoba untuk menjaga hal-hal yang sederhana dan generik, jika memungkinkan.
- Saya melakukan banyak pekerjaan menggunakan GNU
screen
, yang menambahkan lapisan kesenangan lainnya. - Banyak OS mengatur hal-hal seperti
dircolors
dan secara default, dan saya tidak ingin memodifikasi ini pada seratus host yang berbeda. Jadi saya mencoba untuk tetap dengan default. Sebagai gantinya, saya mengubah konfigurasi warna terminal saya. Gunakan warna untuk beberapa perintah Unix (
ls
,grep
,less
,vim
) dan cepat Bash . Perintah-perintah ini tampaknya menggunakan standar " ANSI escape sequence ". Sebagai contoh:alias less='less --RAW-CONTROL-CHARS' export LS_OPTS='--color=auto' alias ls='ls ${LS_OPTS}'
Saya akan memposting .bashrc
dan menjawab pertanyaan saya sendiri Gaya Jeopardy.
column -t --color
?Jawaban:
Berikut adalah beberapa hal yang dapat Anda lakukan:
Editor + Kode
Banyak editor memiliki dukungan penyorotan sintaksis.
vim
danemacs
aktifkan secara default. Anda juga dapat mengaktifkannya di bawahnano
.Anda juga dapat sintaksis kode sorot pada terminal dengan menggunakan Pygments sebagai alat baris perintah.
grep
grep --color=auto
menyoroti semua pertandingan. Anda juga dapat menggunakannyaexport GREP_OPTIONS='--color=auto'
untuk membuatnya tetap tanpa alias. Jika Anda menggunakan--color=always
, itu akan menggunakan warna bahkan ketika pemipaan , yang membingungkan hal-hal.ls
ls --color=always
Warna ditentukan oleh:
(petunjuk:
dircolors
dapat membantu)PS1
Anda dapat mengatur PS1 (prompt shell) untuk menggunakan warna. Sebagai contoh:
Akan menghasilkan PS1 seperti:
[yellow] lucas @ ubuntu: [red] ~ [normal] $
Anda bisa menjadi sangat kreatif dengan ini. Sebagai ide:
Letakkan bilah di bagian atas terminal Anda dengan beberapa info acak. (Untuk hasil terbaik, gunakan juga
alias clear="echo -e '\e[2J\n\n'"
.)Menyingkirkan Escape Sequences
Jika ada sesuatu yang macet menghasilkan warna saat Anda tidak menginginkannya, saya menggunakan
sed
baris ini untuk menghapus urutan pelarian:Jika Anda menginginkan pengalaman yang lebih otentik, Anda juga bisa menghilangkan garis yang dimulai
\e[8m
, yang memerintahkan terminal untuk menyembunyikan teks. (Tidak didukung secara luas.)Perhatikan juga bahwa ^ itu harus aktual, literal ^ [s. Anda dapat mengetiknya dengan menekan ^ V ^ [dalam bash, yaitu Ctrl+ V, Ctrl+ [.
sumber
PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '
. Ada x yang berlebihan setelah backslash keempat.\[...\]
atau perintah lain di baris kedua akan menimpa baris pertama. PS1 = '[\ e [33; 1m] \ u @ \ h: [\ e [31m] \ W \ e [0m \ $'ls --color=always
berhasil. Pendekatan @Michael Durrant lebih baik untuk ini:ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
Saya juga menggunakan:
Dan jika Anda suka mewarnai prompt Anda, vars warna yang ditentukan dapat berguna:
Dan prompt saya adalah sesuatu seperti ini:
$ (vcprompt) memanggil skrip python di my ~ / sbin yang mencetak informasi kontrol versi tentang lintasan saat ini. Ini termasuk dukungan untuk Mercurial, Git, Svn, Cvs, dll. Penulis skrip memiliki sumbernya di sini .
Ini adalah sumber lengkap dari konfigurasi prompt saya:
sumber
$LSCOLORS
dan$CLICOLOR
untuk BSD ls. GNU ls (Linux) digunakan$LS_COLORS
dengan sintaks yang berbeda. Karena GNU terasa seperti rumah bagi saya, saya gunakanLSCOLORS=exgxfxDacxBaBaCaCaeaEa
untuk meniru warna GNU pada BSD.grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
.bashrc
file agar modifikasi menjadi efektif. Anda dapat melakukannya dengan perintah berikut.source /path/to/.bashrc
grep
danls
telah disebutkan, jika Anda ingin lebih banyak warna memeriksa Generic Coloriser , tujuan awal adalah untuk mewarnai logfiles, tapi langsung dari kotak itu juga colorizesping
,traceroute
,gcc
,make
,netstat
,diff
,last
,ldap
, dancvs
.Ini mudah diperpanjang jika Anda tahu regex. Saya telah menambahkan
ps
dannmap
ke daftar (jika Anda masuk,grc
saya akan dengan senang hati berbagi file .conf untuk kedua alat tersebut)(Btw, untuk menginstalnya melalui
synaptic
,pacman
dan sama-sama Anda mungkin memiliki lebih beruntung mencari "grc")sumber
grc
sekarang mendukungps
secara default. Saya akan tertarik dengannmap
pewarnaan Anda . Lihat juga jawaban saya untuk meniadakan semua ini dengan cara yang akan menyerap perintah baru ketika Anda meningkatkan grc.Saya telah mengasah .bashrc saya selama bertahun-tahun untuk bekerja pada OSX dan Ubuntu.
Saya juga mengurangi ukurannya menjadi 28 baris dengan pernyataan kondisi ringkas.
Dengan itu, prompt PS1 saya terlihat seperti:
dengan waktu berwarna merah, nama pengguna berwarna hijau, nama mesin dengan warna biru muda, pwd dengan warna biru gelap dan cabang git dengan warna kuning.
Fitur prompt PS1 saya:
_
antara saat itu (itulahpwd sed
bagian dari LOCATION).Baris yang relevan dari
.bashrc
file saya adalah:Untuk ls dengan warna saat tersedia dan tidak ada kesalahan saat tidak (yaitu OSX):
sumber
ls
OS X, tetapi dilakukan dengan menggunakanexport CLICOLOR=1
.ls
pada MacOS 10. Jawabannya juga salah karena string prompt di sini sebenarnya salah. Mereka tidak menyeimbangkan dengan benar\[
dan\]
, dan telah menyebabkan masalah bagi setidaknya satu orang menyalin jawaban ini .Warna untuk halaman manual ( lebih detail ):
Warna untuk grep (
1;32
berwarna hijau cerah, lihat tulisan lain di sini untuk warna lain):Lebih banyak warna untuk GNU ls :
Instal
grc
( Generic Colouriser ) dan tambahkan ke alias Anda:Warna untuk diff : Terlalu banyak konten untuk suatu fungsi, gunakan skrip dan alias dalam file rc Anda (tidak perlu jika Anda menginstal
grc
):Warna untuk bash prompt :
sumber
PSWD()
Fungsi saya dulunya kompatibel dengan POSIX tetapi jauh lebih mudah difasilitasi menggunakan penanganan substring bash / zsh. Lihat revisi 6 untuk versi POSIX, yang melibatkan banyak tanda tanya dan sama sekali tidak dapat disesuaikan dengan lebar terminal. Saya tidak memperbarui tangkapan layar, tetapi hanya sedikit perubahan pada lebar 80 karakter.CLICOLOR=1
tidak bekerja untuk saya dengan FREEBSD 11.2CLICOLOR=1 ls
harus melakukan hal yang sama denganls -G
menggunakan BSD (ls -g
pada BSD yang lebih lama). Jikals --color
berfungsi (tidak ada kesalahan), Anda menggunakanls
perintah GNU dan$CLICOLOR
diabaikan.~/.bashrc
agar perubahan apa pun berlaku. Baik menjalankansource ~/.bashrc
atau memulai sesi bash baru (meluncurkan terminal atau menjalankanbash
).Atur prompt tebal / berwarna. Dari cyberciti.biz dan BashFAQ
Saya juga berhasil menemukan pengaturan warna yang didukung secara luas, dan yang tidak mencetak karakter gobbledygook di lingkungan yang lebih lama (bahkan FreeBSD4!), Dan tampaknya berfungsi dengan baik jika TERM = vt100, xterm, xterm-color. (Sebagian besar). Dari .bashrc saya:
sumber
Ada alat yang bagus untuk mengatur warna Anda untuk perintah ls - http://geoff.greer.fm/lscolors/
sumber
Hal-hal yang belum dikatakan di sini:
Untuk mewarnai keluaran kompilasi Anda dengan gcc, ada colorgcc oleh Johannes Schlüter
Untuk mewarnai log, ada multitail
Untuk mewarnai stdout, saya mengumpulkan xcol
Saya pribadi menggunakan ini dari alat xcol.
Saya menggunakan variabel-variabel ini dalam skrip saya seperti itu
Saya juga suka fungsi kecil ini berwarnaEcho (ditemukan di Stack Overflow)
Maaf, tidak diizinkan memposting lebih banyak tautan
sumber
Saya sarankan Anda memeriksa ZSH dan pluginnya oh-my-zsh yang memiliki salah satu fitur konsol paling kuat yang saya lihat. Salah satunya adalah memilih tema untuk terminal Anda. Ini adalah contoh dari tema saya ... Dalam tty warna tidak begitu hangat tetapi mereka sama seperti di gambar ini ... Bagaimanapun cara Anda akan menyukainya!
sumber
emulate bash
.zprofile atau .zshrc Anda file. Bagi siapa saja yang bekerja dengan fitur-fitur canggih di BASH, ada banyak kehalusan yang akan menggigit Anda. BASH lebih baik.=~
operator dapat menggigit Anda, cara zsh menangani array dapat menggigit Anda, dll Setelah menggunakan zsh / Oh-My-zsh selama sekitar 9 bulan saya punya cukup itu. Saya menggunakan tema khusus yang saya tulis sendiri, saya porting ke BASH dan menulis prompt git saya sendiri dan saya tidak pernah melihat ke belakang. Sekarang saya tidak lagi khawatir tentang portabilitasUntuk melihat keluaran warna yang berbeda, gunakan colordiff .
Pipa segala keluaran format-berbeda ke colordiff:
Ini termasuk beberapa format alternatif diff, seperti
-y
(berdampingan).Atau, jika dipanggil sendiri (tanpa ada yang disalurkan ke dalamnya) maka ia bertindak sebagai pembungkus di sekitar 'diff', dan warna output. Oleh karena itu saya punya ini di .bashrc saya, alias 'diff' ke colordiff.
sumber
.bashrc
contoh hilang finalfi
, dan dapat dikonversi ke satu perintah-line:type colordiff &> /dev/null && alias diff='colordiff'
Beberapa dekorasi teks (tebal) untuk dengan mudah membedakan antara shell root dan non-root. Untuk zsh:
Untuk Bash:
sumber
bash
.Saya hanya ingin tahu hal yang sama. Saya punya pendekatan sendiri, tetapi saya mencari alternatif.
Saya menulis bungkus bash di sekitar panggilan program dan menyalurkan output mereka sekalipun
sed
. Apa yang saya sukaised
adalah bahwa itu akan memodifikasi dan mengulang setiap baris segera => tidak banyak buffering. Namun, saya tidak suka bahwa untuk setiap panggilan ke program yang dibungkussed
kode diuraikan dan dikompilasi.Sebagai contoh, inilah yang saya lakukan untuk mewarnai keluaran
ip
:sumber
Untuk mengatur prompt, saya punya ini di file .bashrc saya.
Ini memberi saya prompt yang terlihat seperti ini:
Direktori yang berfungsi berwarna hijau. Dan nama pengguna tebal dan cyan kecuali saya menjalankan shell
sudo
, dalam hal ini nama pengguna ("root") menampilkan huruf tebal dan merah.Saya pribadi sangat suka memiliki karakter kontrol pemformatan disimpan dalam variabel karena membuat membaca kode untuk mengatur prompt lebih mudah. Itu juga membuat pengeditan prompt lebih mudah.
Alasan saya menggunakan
tput
adalah bahwa itu seharusnya lebih didukung secara universal daripada033[01;31m\]
urutan aneh . Juga, sebagai bonus tambahan, jika Anda melakukannyaecho $PS1
di prompt, Anda akan melihat prompt mentah dengan warna alih-alih urutan kontrol yang tidak dapat dipahami.sumber
Anda dapat mencoba proyek yang membantu mewarnai keluaran skrip juga, yang dinamai ScriptEchoColor di source forge: http://scriptechocolor.sourceforge.net/
ex.:
Warna otomatis dapat dikonfigurasi.
Ini adalah contoh yang dilakukan dengan itu:
sumber
Alat Python serba guna untuk mewarnai keluaran perintah adalah ' colout '
Anda memberinya regex dengan grup N, diikuti dengan daftar N warna yang dipisahkan koma. Teks apa pun yang cocok dengan grup akan ditampilkan dalam warna yang sesuai.
Jadi misalnya, jika Anda melihat beberapa hasil tes:
maka Anda dapat merapikannya dengan:
Lihat bagaimana regex saya memiliki tiga grup (tanda kurung) diikuti oleh tiga warna (dan opsional tiga gaya, tapi saya telah menggunakan steno untuk mengatur semua warna menjadi 'tebal', jadi grup 'hitam', yang mencocokkan teks dalam tanda kurung , keluar sebagai abu-abu gelap.)
Perhatikan juga bagaimana saya harus menambahkan
2>&1
ke akhir permintaan Python, karena output dari unittest ada di stderr, jadi saya memindahkannya ke stdout sehingga saya bisa menyalurkannya ke colout.Ini umumnya sangat mudah digunakan sehingga saya sering menemukan diri saya membuat doa colout baru dengan cepat, dan menggunakan kembali atau memodifikasi mereka dari sejarah baris perintah saya.
Satu-satunya downside dari itu adalah bahwa ia datang sebagai paket Python, bukan dieksekusi mandiri, jadi Anda perlu menginstalnya menggunakan pip, atau
sudo python setup.py install
.sumber
Saya menemukan Solarized berguna. Ini adalah proyek yang rapi dengan warna seragam untuk banyak aplikasi.
http://ethanschoonover.com/solarized https://github.com/altercation/solarized
sumber
Saya menggunakan pembungkus warna .
Hampir mulus, tetapi begitu saya menemukan bahwa ps dalam shell interaktif mengembalikan output yang berbeda membandingkan ps dalam pipa.
sumber
Untuk Mac Anda dapat menggunakan yang berikut seperti yang ditentukan di sini
sumber
jika Anda ingin membuat
vim
warna - warni Anda seperti saya, saya sarankan Anda untuk mengikuti dua langkah:sumber
Jika bash adalah pilihan Anda, saya sarankan oh-my-bash . Jika zsh adalah pilihan Anda, saya sarankan oh-my-zsh . Keduanya mendukung pewarnaan terminal Anda dan keluaran yang berbeda.
sumber
Saya ingin rendah hati beriklan publikasi baru-baru ini dari
ta
atau textattr , perpustakaan dan alat baris perintah yang bertujuan untuk membuat menambahkan warna dan atribut untuk mempercantik terminal output dari program Anda lebih mudah dengan menerjemahkan spesifikasi terbaca-manusia ke dalam kode melarikan diri ANSI.Sebagai contoh:
echo "The Git repo $(ta yellow)${CUR_REPO}$(ta off) is $(ta green)up-to-date$(ta off)"
atau bahkan lebih pendek:
echo "The Git repo $(ta y)${CUR_REPO}$(ta f) is $(ta g)up-to-date$(ta f)"
atau alternatif:
tawrite "The Git repo " @y ${CUR_REPO} @f " is " @g up-to-date @f "\n"
akan memberi Anda sesuatu seperti:
Saat ini perpustakaan ini dapat digunakan dari empat bahasa C, C ++, D dan Python selain dari penggunaan commandline dari shell favorit Anda.
Perhatikan bahwa itu tidak secara otomatis mewarnai output dari program lain. Ini lebih kegunaan untuk membantu Anda dengan tidak harus mengingat kode muskil. Anda hanya perlu menggunakan nama warna yang jelas atau singkatan rgb cmyk w (hite) (dari) f mereka yang mudah diingat .
Untuk lebih jelasnya kunjungi repo textattr .
sumber