ubah warna prompt tergantung pada pengguna atau root di zsh

13

di zsh Anda dapat memiliki %#dalam PS1(atau PROMPTvariabel apa pun ) yang pada dasarnya berarti tampilan %jika pengguna atau tampilan #jika root. Saya bertanya-tanya apakah ada cara untuk mempengaruhi ini sehingga %atau #perubahan warna tergantung pada apakah itu pengguna atau root (merah untuk root, biru untuk pengguna) cara yang jelas adalah hanya dengan mengubah PS1di root saya ~/.zshrctetapi mempertimbangkan ini sudah menjadi simbol khusus saya bertanya-tanya apakah mungkin tidak ada cara saya dapat menggunakan yang sama PS1untuk keduanya ... sesuatu yang spesifik %#seperti itu untuk zsh (saya yakin ada peretasan lain yang bisa saya lakukan juga seperti pernyataan if if).

xenoterracide
sumber

Jawaban:

8

%(!.%{\e[1;31m%}%m%{\e[0m%}.%{\e[0;33m%}%m%{\e[0m%})

Itu harus bekerja untuk mengubah nama host ( %m) warna yang berbeda (merah) jika Anda root. Saya tidak memiliki shell zsh untuk mengujinya tetapi terlihat benar.

Inilah alasannya:

%(x.true.false):: Berdasarkan evaluasi term term pertama, jalankan pernyataan yang benar. '!' benar jika shell diistimewakan. Faktanya %#adalah jalan pintas untuk %(!.#.%).

%{\e[1;31m%} %m %{\e[0m%}:: the %{\e[X;Ym%}adalah urutan pelolosan warna dengan X sebagai pemformatan (tebal, garis bawah, dll) dan Y sebagai kode warna. Catatan Anda harus membuka dan menutup urutan di sekitar istilah yang Anda cari untuk mengubah warna jika tidak semua setelah titik itu akan menjadi warna apa pun. Saya telah menambahkan spasi di sini sekitar istilah cepat %muntuk kejelasan.

http://www.nparikh.org/unix/prompt.php memiliki lebih banyak opsi dan detail di sekitar tabel warna dan opsi lain yang tersedia untuk zsh.

nzwulfin
sumber
6
autoload colors
colors
PS1="%~ %{%(#~$fg[red]~$fg[blue])%}%#%{$fg[default]%} "

%(#menguji apakah shell berjalan sebagai root. Mengubah ini untuk %(!menguji apakah shell berjalan dengan privilege yang ditinggikan (yang mencakup hal-hal seperti newgrp, tetapi tidak masuk sebagai root).

Gilles 'SANGAT berhenti menjadi jahat'
sumber