Linux (RedHat) `sudo su -l << user_acct >>` не является исходным профилем

Как указано, возникли проблемы с загрузкой профиля по умолчанию <<user_acct>> при выполнении sudo su -l <<user_acct>> .

Внутри .profile ,

 if [ -r "${HOME}/.profile.custom" ]; then . "${HOME}/.profile.custom" fi 

Из того, что я прочитал (например, ответы, подобные этому), -l должен был запустить оболочку входа и, следовательно, получить .profile , но он, похоже, не работает, потому что переменные среды, установленные в .profile.custom (нет, если я просто побежал . .profile , они появляются.

Пересмотренный вопрос : Любые мысли, почему и как обойти эту проблему ?

Обновление. Я нашел решение для своей проблемы в конце концов … Оказывается, это было довольно тривиально – вместо этого установите переменные среды в .bash_profile и они установлены.

Согласно странице man bash , как обсуждалось здесь ,

Когда bash вызывается как интерактивная оболочка входа или как неинтерактивная оболочка с параметром –login, она сначала считывает и выполняет команды из файла / etc / profile, если этот файл существует. После прочтения этого файла он ищет ~ / .bash_profile, ~ / .bash_login и ~ / .profile в этом порядке и считывает и выполняет команды из первого, который существует и доступен для чтения. Опция -noprofile может использоваться, когда оболочка начинает блокировать это поведение.

.. ключ лежит в первом, который существует.

Извлеченный урок: прочитайте «штраф»

  • can not добавить пользователя в группу sudo в centOS 7 i386 (нет GUI, его минимальный)
  • как ввести пароль в конфигурацию sudoers для пользователя, у которого нет пароля?
  • sudo: нет tty присутствует и не указана программа прохода
  • Разрешено только одно имя файла
  • Как получить root внутри vi?
  • Почему мне запрашивают пароль sudo, когда я указал «NOPASSWD» в файле / etc / sudoers?
  • Как изменить содержимое каталога без sudo?
  • Проблема Бодхи с Наутилусом как SU
  • 2 Solutions collect form web for “Linux (RedHat) `sudo su -l << user_acct >>` не является исходным профилем”

    Когда это оболочка входа, bash сначала ищет ~/.bash_profile . Если он не находит его, он ищет ~/.bash_login . Если он не находит его, он ищет ~/.profile . В любом случае, даже если оболочка входа является интерактивной, bash не читает ~/.bashrc .

    Я рекомендую придерживаться следующего содержания в ~/.bash_profile и не иметь ~/.bash_login :

     if [ -e ~/.profile ]; then . ~/.profile; fi case $- in *i*) if [ -e ~/.bashrc ]; then . ~/.bashrc; fi;; esac 

    Таким образом, ваш .profile загружается независимо от того, является ли ваша оболочка входа bash или какой-либо другой вариант sh, а ваш .bashrc загружен bash, является ли оболочка оболочкой входа или нет.

    Не делайте sudo su , это не нужно. sudo -i -u loginname – это то, что вы хотите.

    Linux и Unix - лучшая ОС в мире.