Thay đổi hành vi của bash prompt khi hoạt động như root


16

Trước khi bạn nhấp đi, đây không phải là câu hỏi "làm thế nào để làm cho dấu nhắc bash của tôi có màu". Tôi đã tùy chỉnh dấu nhắc bash của mình để trông như thế này:

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

trong đó mọi thứ trong ngoặc đều có màu xanh nhạt và mọi thứ khác (bao gồm $) đều màu đen bằng cách thêm phần sau vào tệp ~ / .bashrc của tôi

# 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

Mục tiêu là làm cho nó sao cho điều duy nhất thay đổi khi tôi sử dụng 'sudo su' là $ đen thay đổi thành # đỏ. Tôi đã xem trong /etc/bash.bashrc và / etc / profile để xem liệu chỉ có một dòng để bình luận, nhưng có một loạt các thứ về debian_chroot mà tôi không hiểu và tôi không muốn để vít một cái gì đó lên. Làm thế nào tôi có thể hoàn thành những gì tôi muốn?

PS Đây là những gì tôi muốn lời nhắc trông giống như root

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

chỉnh sửa: Đánh dấu giải quyết này, nối thêm mã trên vào ~ / .bashrc trong khi root hoàn thành mục tiêu của tôi. Ngoài ra, trong đoạn mã trên, $ (pwd) chỉ hiển thị thư mục chính (tôi đoán vì đó là thư mục làm việc khi thiết bị đầu cuối được mở) và không bao giờ cập nhật. Thay thế $ (pwd) bằng \ w sẽ sửa lỗi này, nhưng hiển thị thư mục chính là ~, điều mà tôi đang cố tránh.


Bạn đang sử dụng $ pwd hoặc $ PWD?
belacqua

Sẽ không bao bọc chính xác các dòng vì bạn đã không nói với bash rằng bạn đang sử dụng các ký tự không in được. Kèm theo các ký tự không in được, chẳng hạn như \e[01;31m, trong \[...\]. Điều này được giải thích dưới KHUYẾN MÃI trong hướng dẫn. Xem thêm mywiki.wooledge.org/BashFAQ/053
geirha

Lý do tại sao pwdkhông hoạt động trong lời nhắc là, bạn cần thoát ký hiệu đô la, nếu không $(pwd)sẽ được thực thi trước khi nội dung được đặt trong $ PS1. Bạn có thể kiểm tra nó với điều này : PS1="\$(pwd) ".
F-3000

Câu trả lời:


12

Nó cũng sẽ phụ thuộc vào cách bạn trở thành người dùng root. Bạn cần thực hiện thay đổi trong .bashrc của người dùng root nếu bạn đang sử dụng một cái gì đó như su - roothoặc sudo -i, nơi bạn đọc trong môi trường.

Với sudo -s, bạn nên đọc .bashrc của riêng bạn.

Xem xét thêm một số câu lệnh printf hoặc echo để gỡ lỗi mã của bạn, để cho bạn biết khi nào nó đã thực thi.

Sử dụng idlệnh để đảm bảo bạn là người mà bạn nghĩ bạn là:

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

Tôi đang sử dụngsudo su
zmitchell

1
sudo suđọc ~ root / .bashrc (ít nhất là hiện đang được triển khai trên hệ thống 13.04 của tôi).
belacqua

3

Để thay đổi màu của dấu nhắc thành màu đỏ cho root, tôi đã sửa đổi .bashrctệp, theo các ví dụ trong chuỗi này.

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

Sau đó, trong vim, tìm kiếm sự xuất hiện cuối cùng của PS1bài tập và thêm phần này theo sau nó (lưu ý rằng nó cập nhật giá trị $PS1để các dòng trước đó không cần phải sửa đổi và thay đổi có thể dễ dàng hoàn nguyên):

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

2

Theo câu trả lời hợp lệ của belacqua https://askubfox.com/a/305053/12218 , bằng cách phát hành sudo su .bashrc của root đã được tải.

Bạn có thể kiểm tra điều này bằng cách phát hành sudo sutheo sau cd ~bạn sẽ thấy rằng bạn đang ở thư mục gốc của root.

Sử dụng sudo subạn đăng nhập với quyền root (su = switch user) trái với
sudo do some administrative taskngười dùng có đặc quyền nâng cao.

Vì vậy, bằng cách sử dụng, sudo subạn trở thành root thực sự và những thay đổi được thực hiện cho môi trường là những thay đổi được thực hiện cụ thể đối với root, tức là: sudo sutheo sau vim .bashrc.


0

Sau đây có thể giúp

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

Điều này sẽ hiển thị '> 'cho người dùng bình thường và '# 'cho root. Điều này vẫn cần phải được root .bashrc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.