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 может использоваться, когда оболочка начинает блокировать это поведение.

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

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

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 – это то, что вы хотите.

  • sudo su - anotherusername, не запрашивающий пароль
  • Выполнение выражения Bash из sudo
  • запустить команду с sudo su в скрипте и перенаправить stdin и stdout
  • Написать в файл без перенаправления?
  • По умолчанию оболочка не выбрана с помощью useradd
  • Почему я не могу использовать sudo для OpenBSD?
  • Как я могу запустить setfacl -m group: group2: rwx / dev / video0 / dev / snd / * при входе в систему?
  • Пропустить флаги для xargs
  • Трафик tcpdump трафика через SSH - но нет доступа root ssh
  • PAM не может аутентифицировать sudo, после успешного обращения к ssh-agent
  • Как остановить обычных пользователей от «Переключить пользователей»
  • Автозаполнение для недоступных каталогов
  • Linux и Unix - лучшая ОС в мире.