Warna berbeda untuk perintah dan keluaran

12

Saya bertanya-tanya apakah mungkin untuk mengubah warna output dari perintah di linux ke warna yang berbeda dari pada baris perintah tempat saya mengetik. Agak monoton dan sulit untuk menemukan di mana output dimulai. seperti,

@USER/Destop$ ----> blue
/*
--------------
output file in white
-----------
*/

Terima kasih

raj
sumber
2
mungkin menggunakan precmd_functions Anda dapat mengubah warna prompt dan mengaturnya kembali sebelum preexec_functions, atau sesuatu seperti itu. (di zsh, saya tidak tahu apakah ada yang setara dengan shell lainnya)
pataluc
Saya baru saja mencoba saran saya tetapi saya tidak mendapatkan perintah berwarna ... :(
pataluc
1
@pataluc: Saya berhasil dengan preexec () { echo -n "\\e[40;34m" }; yang precmdfungsi IMHO tidak perlu, tampaknya zsh me-reset warna itu sendiri sebelum menampilkan prompt. Tapi itu hanya berfungsi untuk perintah-perintah yang tidak akan mengubah warna itu sendiri (contoh yang menonjol adalah ls) seperti yang ditunjukkan oleh Harun. Dengan cat,, bcperintah shell builtin, dll. (Datar alpine) ini berfungsi dengan baik.
mpy
@ mpy saya berhasil juga, dengan semua perintah, dengan asumsi raj ingin mewarnai perintah dan bukan hasilnya, saya menambahkan "\\e[40;34m"ke akhir PROMPTvar saya , dan mengaturnya kembali menjadi putih dengan preexec () { echo -n "\\e[40;37m" }...
pataluc
1
@pataluc: Maaf, sekarang saya mengerti. Untuk mewarnai baris perintah gunakan saja zle_highlight=(default:fg=cyan)dengan versi zsh terbaru. Zsh juga menawarkan pewarnaan dinamis, seperti fish; lihat bagian CHARACTER HIGHLIGHTING di man zshzle.
mpy

Jawaban:

5

Tidak juga; warna output program tertentu dikontrol oleh perintah, bukan oleh terminal.

Karena itu, dengan anggapan terminal Anda memahami kode pelarian ANSI untuk warna (kebanyakan), Anda dapat menggunakan kode pelarian untuk mengatur warna prompt yang Anda inginkan di awal prompt, dan warna output yang Anda inginkan di akhir; ini akan menghasilkan baris perintah Anda juga menjadi warna apa pun yang Anda tetapkan untuk output, tapi itu mungkin sedekat Anda akan mendapatkan apa yang Anda cari. Misalnya, berikut ini:

$ export PS1='\[\033[00;35m\]\u\[\033[00m\]@\[\033[00;35m\]\H\[\033[00m\]:\[\033[00;33m\]\W\[\033[00m\] \$\[\033[00;34m '

akan memberi Anda prompt yang terlihat seperti:

user@host:wd $ _

dengan 'pengguna' dan 'tuan rumah' dengan warna ungu, 'wd' (cwd Anda) berwarna coklat (kuning gelap), dan semuanya setelah '$' dalam apa pun yang digunakan terminal Anda untuk biru muda. (Xterm default akan membuat ini dalam cyan; gnome-terminal tampaknya default ke warna biru jagung yang agak bagus.)

Kode warna aktual, sebagaimana ditentukan dalam format yang diperlukan untuk bash, adalah, misalnya \[\033[00;35m\], di mana 00;35spesifikasi warna aktual; terkemuka 00jarang berubah, tetapi dapat menghasilkan efek IIRC tebal (01), garis bawah (??), dan membalikkan video (??), sedangkan trailing '35' adalah warna sebenarnya, yang dalam hal ini berwarna ungu.

Sangatlah sulit menemukan daftar kode warna ANSI yang layak, tetapi warna latar depan berjalan dari 30 hingga 37, dan yang latar belakang dari 40 hingga 47, sebagai berikut:

color        fg  bg
black        30  40
red          31  41
green        32  42
yellow       33  43
blue         34  44
purple       35  45
cyan         36  46
gray/white   37  47

Perlu diingat bahwa, karena Anda menetapkan warna default untuk semua yang mengikuti prompt Anda, program yang Anda jalankan yang tidak mengatur warna sendiri melalui kode escape akan mengambil warna itu - misalnya, jika Anda menjalankan pager, Anda cenderung melihat outputnya dalam warna yang sama dengan yang Anda tetapkan untuk perintah lain. Sementara itu, perintah yang tidak mengatur warna mereka sendiri melalui kode melarikan diri akan mengabaikan usaha Anda sepenuhnya.

Aaron Miller
sumber
1
Alih-alih kode melarikan diri, saya telah menemukan bahwa menggunakan tputjauh lebih mudah dibaca untuk mewarnai. Sebagai contoh, prompt saya (dalam bash) adalah export PS1="[\t \[$(tput setaf 9)\]\u\[$(tput setaf 15)\]@\[$(tput setaf 12)\]\h \[$(tput sgr0)\]\w ] \$ "yang menampilkan waktu, kemudian nama pengguna dalam satu warna, yang @lain, dan nama host dalam warna ketiga (merah, putih, dan biru saat ini), kemudian mencetak PWD dan $ . Sangat mudah untuk melihat sekilas di mana garis yang cepat ketika menggulir kembali ke sepanjang sejarah.
MattDMo
Anda hebat ... itu saja yang saya inginkan. Terima kasih, bisakah Anda memberi tahu saya nilai apa yang harus diubah jika saya ingin mengubah warna?
raj
dan adakah cara untuk menjaga yang terakhir sama seperti warna sebelumnya?
raj
dan mengapa bukan permenant perubahan, setiap kali saya login, saya harus mewarnai lagi
raj
1
Perubahan tidak permanen kecuali jika Anda menambahkannya ke file inisialisasi shell Anda, yang untuk bash adalah ~/.bashrc; temukan baris di mana ia mengatur PS1, yang merupakan string prompt Anda, dan memodifikasinya seperti dijelaskan dalam jawaban. Apa yang harus diubah tergantung pada bagaimana string cepat Anda diatur, tetapi sebagian besar rincian penting ada di jawaban saya, dan sisanya dapat ditemukan dengan melakukan sedikit Googling. Saya tidak yakin apa yang Anda maksud dengan "apakah ada cara untuk menjaga yang terakhir sama seperti warna sebelumnya?"
Aaron Miller
7

Anda dapat meneruskan output ke program yang melakukan pewarnaan. Misalnya, ada program seperti pycolor:

pycolor module.py

Untuk membangun sendiri:

red="$(tput setaf 1)"
reset="$(tput sgr0)"
echo $'foo\nbar' | sed -e "s/\(bar\)/$red\1$reset/"

Lebih lanjut tentang output warna.

l0b0
sumber
3

Ya saya punya ini berfungsi untuk bash, di linux dan mac OS setidaknya.

Pertama, atur beberapa variabel atribut, dan prompt PS1 untuk meninggalkan set terminal dengan atribut baris perintah yang diinginkan, misalnya:

bold="\[$(tput bold)\]"
none="$(tput sgr0)"
export PS1="\$ $bold"

Kemudian, gunakan perangkap DEBUG bash, yang dieksekusi sebelum setiap perintah, untuk mengubah atribut teks untuk output perintah:

trap 'echo -ne "${none}"' DEBUG
jackpipe
sumber
1

Alternatif lain (berdasarkan perintah dengan perintah) adalah grc - generic colorizer. Dibutuhkan sedikit kerja untuk mengatur ekspresi reguler yang digunakannya untuk mewarnai sesuatu. Saya mengetahuinya di sini:

https://unix.stackexchange.com/questions/8414/how-to-have-tail-f-show-colored-output?newsletter=1&nlcode=17737|321c

dan di sini:

https://unix.stackexchange.com/questions/26313/colored-find-output

Saya bukan flash dengan regex, jadi saya belum banyak bekerja dengan perintah ini.

Joe
sumber
Saya menggunakan ini dengan semua skrip log-ekor saya. Menakjubkan.
stefgosselin
1

Lempar ini ke file .bashrc Anda dan kemudian sumber file setelah menyimpan.

blk=$'\x1b[90m' # Sets text to black
red=$'\x1b[31m' # Sets text to red
grn=$'\x1b[92m' # Sets text to green
ylw=$'\x1b[93m' # Sets text to yellow
blu=$'\x1b[94m' # Sets text to blue
pur=$'\x1b[95m' # Sets text to purple
cyn=$'\x1b[96m' # Sets text to cyan
wht=$'\x1b[97m' # Sets text to white
rst=$'\x1b[0m'  # resets to default terminal color

Setelah ini selesai, Anda dapat menggunakan semua ini di terminal Anda secara permanen atau sampai Anda berkomentar variabel keluar atau menghapusnya sepenuhnya. Anda dapat menggunakannya dalam skrip di mesin Anda atau dengan substitusi perintah atau apa pun. Berikut ini adalah contoh bagaimana saya menggunakannya secara pribadi:

echo -e "${red}This text is red.${rst}"
printf "${grn}This text is green.\n${rst"

Saya biasanya menggunakan ini dengan perintah individu echodan / atau printftetapi Anda dapat menggunakannya untuk mewarnai perintah lain juga seperti pingperintah. Tambahkan berikut ini .bashrcuntuk mendapatkan efek. Kemudian sumber .bashrcfile Anda dan jalankan cpingperintah untuk digunakan pingdengan teks ungu. Anda dapat mengatur setiap fungsi perintah untuk menggunakan warna apa pun yang didukung terminal Anda.

# Add this to your .bashrc file
colored_ping() {

    echo -e "${pur}$(ping $1)${rst}"
}

alias cping='colored_ping'

Lalu coba:

user@linux:~# cping superuser.com

Output Anda untuk cpingakan menjadi ungu. Jika Anda ingin menggunakan beberapa warna dalam output yang sama, Anda dapat menambahkannya dengan cara unik. Bagaimana Anda melakukannya sepenuhnya terserah Anda. Sebagai contoh:

echo -e "${red}This is red and ${blu}this is blue and ${grn}this is green.${rst}
Yokai
sumber
0

Anda harus melihat perintah hl yang tersedia di git hub:
github: git clone http://github.com/mbornet-hl/hl
dan pada:
http://www.flashnux.com/notes/page_000022_US.html
hl adalah perintah linux yang ditulis dalam C, khusus dirancang untuk mewarnai file teks atau output dari suatu perintah. Anda dapat menggunakan hingga 42 warna secara bersamaan, dan menggunakan file konfigurasi untuk menyederhanakan baris perintah. Anda dapat mewarnai keluaran dari setiap perintah yang dapat disalurkan ke perintah lain. Dan jika Anda tahu apa ekspresi reguler, akan sangat mudah bagi Anda untuk menggunakannya. Anda dapat menggunakan halaman manual untuk memahami cara menggunakannya.

semak
sumber