.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, але безрезультатно.

Чому це відбувається?


використовувати --login переключитися наsu
Nikhil Mulley

1
FYI - приємний запис на файли конфігурації bash hacktux.com/bash/bashrc/bash_profile
Nikhil 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.

5

Bash поводиться по-різному залежно від того, якщо він вважає, що це оболонка для входу, тобто перша оболонка, запущена при вході в систему. Він читає лише, .bash_profileякщо це оболонка для входу. Якщо замість цього ввести PATH-changing код .bashrc, він буде запущений для всіх інтерактивних оболонок bash, а не тільки оболонок для входу.


0

Якщо ви використовуєте середовище Gnome в Scientific Linux 6 (або, імовірно, RHEL 6), запустіть термінал. Перейдіть на вкладку Edit-> Profile Preferences-> "Title and Command". Переконайтесь, що прапорець "Запустити команду як оболонка для входу" встановлено. Я виявив, що додаток терміналу Gnome ігнорує моє, .bash_profileякщо я цього не роблю.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.