Я работаю на Mac и использую Snow Leopard (если это имеет значение). Я настраиваю мое приглашение bash для отображения вещей, которые извлекаются из определенных мест пользователя. Например, я использую Ruby Version Manager для управления различными версиями Ruby. Я показываю версию Ruby, которую я использую в приглашении. Я также использую Homebrew и установил Git через Homebrew. Я также отображаю ветку Git в приглашении.

Проблема в том, что когда я переключаюсь на root (sudo su или sudo bash), он пытается использовать приглашение моего пользователя, которое он не сможет использовать, потому что не сможет найти RVM или Homebrew. Таким образом, он отображает ошибки. Как я могу это исправить, чтобы он не отображал ошибки? (либо перенеся RVM/Homebrew, как если бы я все еще был этим пользователем, либо не отображая мое настраиваемое приглашение)

5 ответов5

1

Опция 1

Используйте sudo su - вместо sudo su

Дополнительная черта является синонимом -l который имитирует полный вход в систему. Это означает, что он будет читать файлы конфигурации (.bashrc, .profile и т.д.) Из домашнего каталога пользователя root.

Вариант 2

Если вы настаиваете на использовании своего собственного .bashrc, поставьте тест, чтобы проверить наличие RVM в пути, прежде чем пытаться поместить его в путь. Что-то вроде этого:

type rvm > /dev/null
RVM_EXISTS=$?  # get exit status, 0 if it exists
if [ $RVM_EXISTS ] 
then
    PS1=(your rvm code here)
else
    PS1=(your prompt w/o rvm here)
fi

(не испытано)

Вариант 3

Проверьте наличие rvm, как в варианте 2, но создайте фиктивную функцию bv rvm, если она не существует и не изменяет PS1

type rvm > /dev/null
RVM_EXISTS=$?  # get exit status, 0 if it exists
if [ ! $RVM_EXISTS ] 
then
   rvm () { echo > /dev/null }
fi
0

Я не совсем уверен, но я полагаю, что запуск sudo -s запустит root-оболочку со всеми вашими переменными окружения, все еще действующими.

0

Не позволю мне проголосовать, но у Дуга Харриса правильный ответ:«Используйте sudo su - вместо просто sudo su»

Это, безусловно, самый простой способ сделать это. И это работает при переходе sudo к любому пользователю, чтобы принять его среду входа в систему. Лично я не стал бы возиться со средой входа в систему root и использовал бы вместо этого «sudo su -».

0

Вам нужно изменить приглашение, манипулируя системной переменной $ PS1

Если вы хотите просто отобразить имя вашего хоста и знак доллара, вы можете сделать следующее:export PS1='h:\W\$'

Чтобы сохранить настройки для следующей оболочки Bash, поместите в ваш $ HOME/.bashrc строку, которая выглядит следующим образом: PS1='\h:\W\$'

Пользователи Mac отмечают следующее. Из-за того, как OS X и приложение Terminal обрабатывают эмуляцию команды, вы должны создать файл $ HOME/.bash_profile и ввести следующую строку: source ~/.bashrc

Источник

0

Вы можете установить все это в домашнем каталоге root, чтобы он использовал другой .bashrc или тот же (просто mv it)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .