Mengubah perilaku bash prompt saat berfungsi sebagai root

16

Sebelum Anda mengklik, ini bukan pertanyaan "bagaimana cara membuat bash prompt saya berwarna". Saya sudah menyesuaikan bash prompt saya agar terlihat seperti ini:

[user @ host]----[$(pwd)]
$ 

di mana segala sesuatu di dalam tanda kurung berwarna biru muda, dan segala sesuatu yang lain (termasuk $) berwarna hitam dengan menambahkan yang berikut ke file ~ / .bashrc saya

# Turn the prompt symbol red if the user is root
if [ $(id -u) -eq 0 ];
then # you are root, make the prompt red
    PS1="[\e[01;34m\u @ \h\e[00m]----[\e[01;34m$(pwd)\e[00m]\n\e[01;31m#\e[00m "
else
    PS1="[\e[01;34m\u @ \h\e[00m]----[\e[01;34m$(pwd)\e[00m]\n$ "
fi

Tujuannya adalah untuk membuatnya sedemikian rupa sehingga satu-satunya hal yang berubah ketika saya menggunakan 'sudo su' adalah bahwa $ hitam berubah menjadi # merah. Saya telah mencari di /etc/bash.bashrc dan / etc / profile untuk melihat apakah hanya ada satu baris untuk berkomentar, tetapi ada banyak hal tentang debian_chroot yang tidak saya mengerti, dan saya tidak ingin untuk mengacaukan sesuatu. Bagaimana saya bisa mencapai apa yang saya inginkan?

PS Inilah yang saya ingin prompt terlihat seperti root

[user @ host]----[$(pwd)]
(red)#

edit: Tandai ini terpecahkan, tambahkan kode di atas ke ~ / .bashrc sementara root mencapai tujuan saya. Juga, dalam kode di atas, $ (pwd) hanya menampilkan direktori home (saya kira karena itu adalah direktori yang berfungsi ketika terminal dibuka), dan tidak pernah memperbarui. Mengganti $ (pwd) dengan perbaikan \ w ini, tetapi menampilkan direktori home sebagai ~, yang saya coba hindari.

zmitchell
sumber
Apakah Anda menggunakan $ pwd atau $ PWD?
belacqua
Ini akan gagal membungkus baris dengan benar karena Anda tidak memberi tahu bash bahwa Anda menggunakan karakter yang tidak dapat dicetak. Lampirkan karakter yang tidak dapat dicetak, seperti \e[01;31m, dalam \[...\]. Ini dijelaskan dalam PROMPTING dalam manual. Juga lihat mywiki.wooledge.org/BashFAQ/053
geirha
Alasan mengapa pwdtidak bekerja di prompt adalah, bahwa Anda harus keluar dari tanda dolar, jika tidak $(pwd)akan dieksekusi sebelum konten ditempatkan dalam $ PS1. Anda dapat mengujinya dengan ini: PS1="\$(pwd) ".
F-3000

Jawaban:

12

Ini juga akan tergantung pada bagaimana Anda menjadi pengguna root. Anda perlu membuat perubahan di .bashrc pengguna root jika Anda menggunakan sesuatu seperti su - rootatau sudo -i, tempat Anda membaca di lingkungan.

Dengan sudo -s, Anda harus membaca .bashrc Anda sendiri.

Pertimbangkan untuk menambahkan pernyataan printf atau echo untuk men-debug kode Anda, untuk memberi tahu Anda ketika kode telah dieksekusi.

Gunakan idperintah untuk memastikan Anda adalah diri Anda yang sebenarnya:

root@tau:~# id
uid=0(root) gid=0(root) groups=0(root)
belacqua
sumber
Saya menggunakansudo su
zmitchell
1
sudo sumembaca ~ root / .bashrc (setidaknya seperti yang saat ini diterapkan pada sistem 13.04 saya).
belacqua
3

Untuk mengubah warna prompt menjadi merah untuk root, saya memodifikasi .bashrcfile, mengikuti contoh di utas ini.

regularuser@myubuntubox:~$ sudo su - 
root@myubuntubox:~# vim .bashrc

Kemudian, dalam vim, cari tampilan akhir PS1penugasan, dan tambahkan berikut ini (perhatikan bahwa itu memperbarui nilai $PS1sehingga baris sebelumnya lainnya tidak perlu dimodifikasi, dan perubahannya mudah dikembalikan):

# Set RED prompt
PS1="\[\e[01;31m\]$PS1\[\e[00m\]"
CJBS
sumber
2

Mengikuti jawaban valid belacqua /ubuntu//a/305053/12218 , dengan menerbitkan sudo su .bashrc root dimuat.

Anda dapat memeriksa ini dengan mengeluarkan sudo sudiikuti cd ~Anda akan melihat bahwa Anda berada di direktori home root.

Menggunakan sudo suAnda login sebagai root (su = beralih pengguna) bertentangan dengan
sudo do some administrative tasksebagai pengguna dengan hak istimewa yang tinggi.

Jadi dengan menggunakan sudo suAnda menjadi root aktual dan perubahan yang dibuat ke lingkungan adalah perubahan yang dibuat khusus untuk root, yaitu: sudo sudiikuti oleh vim .bashrc.

Stef K
sumber
0

Mengikuti mungkin membantu

export PS1='`[ $(id -u) == "0" ] && echo "#" || echo ">"` '

Ini akan ditampilkan '> 'untuk pengguna normal dan '# 'untuk root. Ini masih harus di root .bashrcjuga.

Petr Gladkikh
sumber