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

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

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

  • Как установить некоторые необходимые библиотеки для программы без sudo?
  • Как я могу «alias sudo !!»?
  • Возможно выполнить команду pipe с помощью su через ssh
  • Кто является владельцем файла, если файл создан с помощью команды sudo?
  • Измените файлы с помощью редактора, которому необходимы права sudo
  • Вопросы о sudo
  • Невозможно использовать sudo и другие приложения
  • ssh как суперпользователь
  • 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 – это то, что вы хотите.

    Interesting Posts

    команда для массового переименования файлов в соответствии с шаблоном

    Почему нет других дистрибутивов / спинов на базе openSuSE?

    Невозможно изменить размер окна Gedit

    Консольный экран без X11

    Как я могу навсегда удалить предупреждение SSL для веб-браузера для сайтов HTTPS, которые не могут правильно идентифицировать себя?

    Переименование и переупорядочение нескольких имен файлов без переименования

    Как читать разные строки файла для разных переменных?

    синтаксис `trap n condition`

    Как повторно использовать физическую память в отсутствие замены?

    Запись с запаздыванием RAID

    импортирование закрытого ключа gpg – не будет импортировать

    отфильтровывать / отбрасывать некоторые сообщения rsyslog

    Не удается закрыть файл / etc / mtab при восстановлении / etc с помощью rar

    Прочтите специальные клавиши в bash

    Почему я не могу включить передачу на FreeNAS 9.2? Я продолжаю получать ошибку

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