.bash_profile не получен при запуске su

41

У меня есть пользователь, скажем user1, у которого есть изменения его .bash_profile, один из них , изменяющих PATH, например: export PATH=/some/place:$PATH. Это изменение работает нормально, если я вхожу в систему user1или делаю su - user1.

Но если я попытаюсь выполнить команду через suкак root, например:

su -c test.sh oracle

(тест содержит echo $PATH)

Кажется, он не имеет модифицированных PATH(или корневых PATH, в этом отношении). Я также попытался скопировать .bash_profileна .profile, но безрезультатно.

Почему это происходит?

NullUser
источник
использовать --login переключательsu
Нихилу Mulley
1
FYI - хорошая рецензия на файлах конфигурации Баш hacktux.com/bash/bashrc/bash_profile
Нихилу Mulley

Ответы:

60

Использование suбез -lили -запуска bashв качестве интерактивной, но не входящей в систему оболочки, которая не читает ни из одного из указанных вами файлов. Используйте -lили -опцию или поставить соответствующие конфигурации в /root/.bashrc.

Краткий обзор конфигурационных файлов:

  • Войти оболочки ( -l/ --login) считывает /etc/profileпервый, а затем первым он находит из: ~/.bash_profile, ~/.bash_login, и ~/.profile.
  • Интерактивная, но не входящая в оболочку оболочка ( -i) читает /etc/bash.bashrcи ~/.bashrc, в том порядке (если не используется --rcfileопция, и указывает, что нужно искать в другом месте).
  • Неинтерактивные оболочки, например, запущенные из другой программы без использования флагов -lили -i, считывают файл, указанный в BASH_ENVпеременной среды.
  • При запуске в shкачестве оболочки входа в систему он будет читать /etc/profileи ~/.profileв том порядке.
  • Когда он запускается как shинтерактивный не-логин, он читает файл, указанный в ENV.
Kevin
источник
5

Bash ведет себя по-разному в зависимости от того, считает ли он, что это оболочка входа в систему, то есть первая оболочка, запускаемая при входе в систему. Он читает только .bash_profileесли это оболочка входа в систему. Если вместо этого вы PATHвведете код -changing .bashrc, он будет работать для всех интерактивных оболочек bash, а не только для оболочек входа в систему.

Кайл Джонс
источник
0

Если вы используете среду Gnome в Scientific Linux 6 (или предположительно RHEL 6), запустите терминал. Перейдите на вкладку Edit-> Profile Preferences-> "Title and Command". Убедитесь, что установлен флажок «Запускать команду как оболочка входа». Я обнаружил, что терминальное приложение Gnome игнорирует мое, .bash_profileесли я не сделаю этого.

Эндрю
источник