Pertanyaan Mengubah perilaku bash prompt saat berfungsi sebagai root


Sebelum Anda mengeklik, ini bukan pertanyaan umum "bagaimana cara membuat pesan bash prompt memiliki warna". Saya sudah menyesuaikan perintah bash saya agar terlihat seperti ini:

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

di mana segala sesuatu dalam tanda kurung berwarna biru muda, dan semua yang lain (termasuk $) berwarna hitam dengan menambahkan yang berikut ini 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 sehingga satu-satunya hal yang berubah ketika saya menggunakan 'sudo su' adalah $ hitam berubah menjadi merah #. Saya telah melihat di /etc/bash.bashrc dan / etc / profile untuk melihat apakah ada garis untuk berkomentar, tetapi ada banyak hal tentang debian_chroot yang saya tidak mengerti, dan saya tidak ingin untuk mengacaukan sesuatu. Bagaimana saya bisa mencapai apa yang saya inginkan?

P.S. Inilah yang saya ingin agar 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 kerja ketika terminal dibuka), dan tidak pernah diperbarui. Mengganti $ (pwd) dengan \ w perbaikan ini, tetapi menampilkan direktori home sebagai ~, yang saya coba hindari.


13
2018-06-06 23:01


asal


Apakah Anda menggunakan $ pwd atau $ PWD? - belacqua
Ini akan gagal membungkus garis dengan benar karena Anda tidak mengatakan bash bahwa Anda menggunakan karakter yang tidak dapat dicetak. Sertakan karakter yang tidak dapat dicetak, seperti \e[01;31m, di \[...\]. Ini dijelaskan di bawah PROMPTING di manual. Juga lihat mywiki.wooledge.org/BashFAQ/053 - geirha
Alasan mengapa pwd tidak bekerja dalam prompt adalah, bahwa Anda perlu melarikan diri dari tanda dolar, sebaliknya $(pwd)akan dieksekusi sebelum konten ditempatkan dalam $ PS1. Anda dapat mengujinya dengan ini: PS1="\$(pwd) ". - F-3000


Jawaban:


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

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

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

Menggunakan id perintah untuk memastikan Anda adalah siapa yang Anda pikir Anda:

root@tau:~# id
uid=0(root) gid=0(root) groups=0(root)

10
2018-06-06 23:03



saya menggunakan sudo su - zmitchell
sudo su membaca ~ root / .bashrc (setidaknya saat ini diterapkan pada sistem 13.04 saya). - belacqua


Berikut jawaban yang valid dari belacqua https://askubuntu.com/a/305053/12218, dengan mengeluarkan sudo su root .bashrc dimuat.

Anda dapat memeriksanya dengan menerbitkan sudo su diikuti oleh cd ~ Anda akan melihat bahwa Anda berada di direktori home root.

Menggunakan sudo su Anda login sebagai root (su = switch user) yang bertentangan dengan
sudo do some administrative task sebagai pengguna dengan hak istimewa tinggi.

Jadi dengan menggunakan sudo su Anda menjadi root yang sebenarnya dan perubahan yang dilakukan terhadap lingkungan adalah perubahan yang dibuat khusus untuk root, yaitu: sudo su diikuti oleh vim .bashrc.


2
2018-06-06 23:15





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

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

Kemudian, di vim, cari tampilan akhir PS1 tugas, dan tambahkan ini mengikutinya (perhatikan bahwa itu memperbarui nilai $PS1 sehingga jalur sebelumnya lainnya tidak perlu dimodifikasi, dan perubahan mudah dikembalikan):

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

2
2018-01-23 22:43