Menyesuaikan shell bash: Tebal / warnai perintah


13

Ada sejumlah tutorial / posting online (mis. Http://www.cyberciti.biz/faq/bash-shell-change-the-color-of-my-shell-prompt-under-linux-or-unix/ ) tentang cara menyesuaikan permintaan Anda di bash dengan menetapkan PS1. Apakah ada cara untuk menyesuaikan warna / huruf tebal dari perintah yang saya ketik?

Dengan kata lain, sebagai contoh katakanlah saya ingin prompt hijau, perintah biru tebal, dan kemudian output dalam warna apa pun yang akan default. Dalam contoh di bawah ini, saya sudah tahu bagaimana membuat " joe>" tampilan hijau, biru, tebal, apa pun dengan pengaturan PS1. Tapi apakah ada cara saya bisa membuat git statuspertunjukan berani misalnya?

joe> git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
...

Jika Anda ingin shell yang benar-benar bagus, Anda harus menggunakan zsh, apa yang ingin Anda capai akan sangat sederhana denganpreexec() { printf '\e[0m' }
bollovan

3
@bollovan - 'Benar-benar bagus' agak subyektif, saya merasa sangat menjijikkan karena ketidakpatuhannya dan POSIX. Tapi, apa pun yang mengapungkan perahumu.
Chris Down

@ChrisDown mengasapi perahu Anda - tidak pernah mendengarnya, cukup lucu.
n611x007

Jawaban:


13

Anda harus meninggalkan warna tertinggal setelah PS1 (mulai setelah >dalam contoh Anda), dan kemudian gunakan bash DEBUGtrap untuk menghapus warna sebelum perintah Anda dijalankan (tetapi setelah Anda menekan enter di shell Anda. Coba sesuatu seperti ini :

shopt -s extdebug
trap "tput sgr0" DEBUG

bagi seseorang yang tidak dikenal untuk menghindari kode: apakah ini akan mempertahankan pewarnaan asli dari perintah (mis. akan ls --color=alwaysdiwarnai)?
n611x007

@naxa - Ya, karena ini secara eksplisit menetapkan kode warna (kecuali untuk warna yang diwarnai dalam warna terminal default, yang hanya akan berlaku setelah warna pertama).
Chris Down

Trik ini tampaknya mengganggu penyelesaian tab (mencetak hal-hal aneh seperti ^[(B^[[m). Itu terjadi hanya pada beberapa sistem, meskipun: Saya menguji ini pada dua sistem, keduanya menjalankan Ubuntu 12,04 LTS, dan hanya satu dari mereka yang memiliki gangguan.
musiphil

7

Untuk kelengkapan, berikut cara mengatur warna prompt dan warna input baris perintah di bash. Masukkan baris ini di .bashrc.

PS1='\[\e[1;34m\]\w\$ \[\e[0;32m\]'
trap 'printf \\e[0m' DEBUG

Perangkap DEBUG, seperti yang disarankan oleh Chris Down , digunakan untuk mengatur ulang atribut teks. Ini dimaksudkan untuk debugging, tetapi juga berguna untuk mengeksekusi kode sebelum mengeksekusi perintah yang diketik oleh pengguna .

Dalam pengaturan prompt:

  • \[…\] digunakan di sekitar sekuens escape untuk memberitahu bash bahwa mereka tidak menggunakan real estat layar apa pun (tanpa mereka, layar akan menjadi kacau ketika bash perlu menggambar ulang prompt).
  • \e[…mdi mana angka, atau lebih umum urutan angka yang dipisahkan oleh titik koma, adalah urutan melarikan diri yang dikirim ke terminal untuk mempengaruhi warna dan atribut lain dari teks berikut. Misalnya, 1;34atur tebal biru; 0;32me-reset semua atribut kemudian beralih warna menjadi hijau. Sesuaikan dengan selera.
  • \w\$cetak direktori saat ini dan $atau #. Tentu saja Anda dapat mengubah ini menjadi apa pun yang Anda suka, dan menyisipkan perubahan atribut teks di antaranya jika Anda mau.
  • Ada perubahan atribut terakhir di bagian akhir, yang menetapkan warna input teks.

FYI, kode / urutan warna bash dapat dilihat di sini: misc.flogisoft.com/bash/tip_colors_and_formatting
kaiwan

0

Saya baru belajar tentang perintah BASH dan saya telah duduk di sini bermain dengan perintah warna dalam versi saya. Saya menemukan solusi ini:

Menggunakan perintah ini:

PS1='\[\e[0:36m\]\h>\[\e[0;31m\]'

Dekonstruksi: PS1 =: memulai perintah PS1

'': berisi perintah dalam tanda kutip tunggal (jadi BASH tidak berpikir itu adalah perintah untuk itu)

\: setiap perintah individu dimulai dengan ini

[]: berisi setiap perintah

\ e (bisa juga \ 033 karakter pelarian ASCII): memulai perintah warna

Perintah warna mendahului hal itu berlaku.

[\ e [0; 36m]: cyan

\ h: nama host

'>': dicetak setelah nama host

[\ e [0; 31m]: merah

Rupanya, perintah merah di akhir membuat input menjadi merah. Ubah saja warna sesuai keinginan Anda dan itulah yang Anda cari.

Juga, situs ini membantu saya sedikit:

https://www.linuxnix.com/linuxunix-shell-ps1-prompt-explained-in-detail/

Versi Saya: GNU bash, v. 4.2.46

Hati hati,

Musang

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.