Чому root не джерело .bash_profile?


10

Кожен раз, коли я намагаюся увійти як root, використовуючи su(не su -), він не джерело .bash_profileв домашньому каталозі user1.

В принципі, мій /var/rootкаталог не має .bash_profile, так що я поклав копію .bash_profileв /var/rootвипробуванню su -.

Він також не надходить автоматично .bash_profilevar/root).

У будь-якому випадку, я хочу зробити .bash_profile, щоби користувач1, автоматично отримував джерело в кореневому обліковому записі під час використання su.

Що я повинен зробити?

(Це працювало раніше! Один день, він просто не джерело! Можливо, щось змінило настройки в bash? Це працює, коли я входжу source .bash_profileпісля входу в систему.)

Я використовую Mac та OS X Yosemite.

Відповіді:


11

Оболонка за замовчуванням для rootOS X є /bin/sh. Це shтакож версія bash, але при посиланні на ім'я shBash :

намагається імітувати поведінку при запуску історичних версій shякомога ближче, одночасно відповідаючи стандарту POSIX.

Коли викликається як інтерактивна оболонка для входу, або як неінтерактивна оболонка з --loginможливістю, вона спочатку намагається прочитати та виконати команди з /etc/profileта ~/.profileв цьому порядку. ... оболонка, що викликається, як sh не намагається читати та виконувати команди з будь-яких інших файлів запуску

Тобто, він взагалі не читається .bash_profile, незалежно від того, викликали його як оболонку входу чи ні . Ви можете використовувати .profileнатомість або навіть символізувати одне до іншого. Якщо ви запускаєте оболонку для входу з su -l, .profileзавантажується при запуску, але .bash_profileніколи не буде.


Ви можете також використовуватиdscl для зміни оболонки суперкористувача (зауважимо , що /etc/passwdце НЕ використовується для визначення оболонки на OS X). Ви можете перевірити поточну оболонку кореня за допомогою dscl . -read /Users/root UserShell; проконсультуйтеся з документацією і ретельно подумайте, перш ніж змінити її на щось інше.

Інший підхід - просто змінити suвиклик, щоб примусити його bashнегайно виконувати .

З огляду на те, що ви сказали, я, мабуть, рекомендую посилання, але ви, можливо, захочете вивчити зміни, які вносить режим POSIX Баша, і вирішити, хочете ви їх мати чи ні.


5

Тому що вона не розглядається як "оболонка входу" (яка викликається безпосередньо з loginабо sshd), а проста "інтерактивна оболонка". Дивіться тут, наприклад: https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

Тому примушуйте suвикористовувати варіант входу, тобто з -lопцією:

su -l

Або введіть своє середовище у .bashrcфайл.


5

Користувач root буде намагатися виконати файл .bashrc замість .bash_profile, оскільки ви не викликаєте оболонку входу.

З посібника з bash man bash:

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

Зверніть увагу, ~де файл .bashrc повинен знаходитись у домашньому довіднику кореневого користувача.

Щоб відповісти на ваше запитання, якщо ви хочете використовувати .bashrc файл user1, я б запропонував вам зробити (символічне) посилання між джерелом .bashrc від user1 до кореневого користувача.

Ви також можете розглянути джерело user1 .bashrc або навіть .bash_profile, додавши рядок . /homedirectory/of/user1/.bash_profileу файл .bashrc кореневого користувача.

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