Bagaimana cara menghentikan warna PS1 bash shell untuk berhenti di akhir perintah?

12

Saya memiliki warna PS1 khusus di mana saya memiliki perintah shell aktual dalam warna yang berbeda, supaya saya dapat dengan cepat melihat perintah apa yang saya ketik dan pisahkan dari output perintah itu sendiri.

Misalkan warna dalam PS1 diatur ke 'biru' untuk command prompt dan warna default di shell saya adalah putih.

  • Saya mengetikkan perintah misalnya ls, (ls -l berwarna biru)
  • Output yang dihasilkannya, baris pertama masih biru
  • Semua garis tersisa berwarna putih

Yang saya inginkan adalah semua output setelah perintah menjadi 'putih'.

Contoh lain:

  • Saya mengetik perintah 'cat', warnanya biru
  • Output datang, seluruh output berwarna biru

Saya ingin output menjadi 'putih' sambil menjaga command prompt saya mengetik 'biru'

Pada beberapa perintah, tidak apa-apa, perintah lain, warna yang sama meluap ke baris pertama dari output dan kemudian warna default menendang dan beberapa perintah lain, seluruh output (misalnya cat) memiliki warna yang sama.

Apakah ada cara untuk menjaga hanya perintah yang saya ketik dalam satu warna dan sisanya ke default?

Saya menggunakan OSX.

EDIT # 1

Berikut adalah tangkapan layar yang ditautkan @ derobert dalam komentar yang menunjukkan apa yang saya cari.

                 ss # 1

iQ.
sumber
2
Anda harus menunjukkan kepada kami permintaan Anda agar kami dapat menentukan kesalahan.
glenn jackman

Jawaban:

14

Anda pada dasarnya ingin mengatur ulang warna terminal tepat sebelum bash mengeksekusi perintah. Ini dapat dilakukan dengan a trap.

Sebagai contoh:

trap '[[ -t 1 ]] && tput sgr0' DEBUG

Bash mengeksekusi DEBUGtrap segera sebelum perintah, jadi ini akan menghasilkan tput sgr0(yang me-reset atribut format) dijalankan sebelum setiap perintah.

Ini [[ -t 1 ]]adalah pemeriksaan keamanan untuk memastikan bahwa STDOUT sebenarnya adalah terminal. Mungkin ada beberapa kasus di mana STDOUT bash tidak terhubung ke terminal (perpipaan, ssh jarak jauh, dll), jadi Anda tidak ingin tputmengirim kode pelarian terminal.

Patrick
sumber
Di mana Anda meletakkan ini? Katakanlah PS1 tidak mengatur kembali warnanya. Sekarang bagaimana Anda menambahkan baris ini untuk menjalankan perintah ini tepat setelah pengguna memasukkan perintahnya dan menekan enter?
polym
1
@polym di Anda .bashrc(atau di mana pun $PS1diatur). Saya akan meletakkannya tepat di sebelah $PS1definisi sehingga Anda tahu mereka terkait.
Patrick
ok wow itu berhasil. Adakah kemungkinan hal ini salah?
polym
@polym tidak lagi
Patrick
brilian, itulah yang saya butuhkan untuk mengatur ulang warna terminal.
iQ.