Зміна поведінки bash підкаже, коли функціонує як root


16

Перш ніж натиснути кнопку, це не типове запитання "як зробити так, щоб мій баш-запит мав колір". Я вже налаштував своє баш-підказка таким чином:

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

де все в дужках світло-синього кольору, а все інше (включаючи $) - чорне, додавши до мого файлу ~ / .bashrc наступне

# 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

Мета полягає в тому, щоб зробити так, що єдине, що змінюється, коли я використовую "sudo su", - це те, що чорний $ перетворюється на червоний #. Я заглянув у /etc/bash.bashrc та / etc / profile, щоб побачити, чи є лише рядок для коментарів, але є маса матеріалів про debian_chroot, які я не розумію, і я не хочу викрутити щось. Як я можу досягти того, що хочу?

PS Це те, що я хочу, щоб підказка виглядала як корінь

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

редагувати: Позначте це вирішеним, додавши вищезазначений код до ~ / .bashrc, поки root виконав мою мету. Крім того, у наведеному вище коді $ (pwd) відображає лише домашній каталог (я думаю, тому що це робочий каталог, коли термінал відкрито), і ніколи не оновлюється. Заміна $ (pwd) на \ w виправляє це, але відображає домашній каталог як ~, чого я намагався уникати.


Ви використовуєте $ pwd або $ PWD?
белаква

Не вдасться правильно обернути рядки, оскільки ви не сказали баш, що використовуєте символи, що не друкуються. Вкладіть символи, що не друкуються, наприклад \e[01;31m, у \[...\]. Це пояснюється у розділі ПРОМПТИНГ у посібнику. Також дивіться mywiki.wooledge.org/BashFAQ/053
geirha

Причина, чому pwdне працювало в підказці, полягає в тому, що вам потрібно уникнути знаку долара, інакше $(pwd)він буде виконаний до розміщення вмісту в $ PS1. Ви можете перевірити це з цим: PS1="\$(pwd) ".
F-3000

Відповіді:


12

Це також залежатиме від того, як ви станете користувачем root. Вам потрібно внести зміни в .bashrc кореневого користувача, якщо ви використовуєте щось на зразок su - rootабо sudo -i, де ви читаєте в оточенні.

З sudo -s, ви повинні читати свій власний .bashrc.

Подумайте про те, додати кілька виправлень printf чи echo для налагодження коду, щоб повідомити, коли він виконаний.

Використовуйте idкоманду, щоб переконатися, що ви є тим, ким ви вважаєте, що ви є:

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

Я використовуюsudo su
zmitchell

1
sudo suчитає ~ root / .bashrc (принаймні, як зараз реалізовано в моїй системі 13.04).
belacqua

3

Щоб змінити колір підказки на червоний для root, я змінив .bashrcфайл, дотримуючись прикладів у цій темі.

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

Потім, у vim, знайдіть остаточний вигляд PS1завдання та додайте його слідом за ним (зауважте, що він оновлює значення $PS1так, що інші попередні рядки не потребують змін, і зміна легко перетворюється):

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

2

Після дійсної відповіді belacqua /ubuntu//a/305053/12218 , видавши sudo su, завантажується коріння .bashrc.

Ви можете перевірити це, видавши, sudo suпісля чого cd ~ви побачите, що ви перебуваєте в домашній директорії root.

Використання sudo suвходу в систему як root (su = switch user) всупереч
sudo do some administrative taskкористувачеві з підвищеними привілеями.

Таким чином, використовуючи sudo suви стаєте фактичним корінцем, а зміни, внесені до середовища, - це зміни, внесені спеціально до кореня, тобто: sudo suслідом за цим vim .bashrc.


0

Наступне може допомогти

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

Це покаже як '> 'для звичайного користувача, так і '# 'для root. Це все ще має бути в корені .bashrc.


Аналогічна річ може бути досягнута, \$що показує, #чи є root, а $інше. \$не дуже корисно, хоча не налаштовується.
Людина капітана
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.