Почему root не является источником .bash_profile?

10

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

В принципе, мой /var/rootкаталог не имеет .bash_profile, так что я положил копию .bash_profileв /var/rootиспытанию su -.

Это не автоматически источник .bash_profilevar/root), либо.

В любом случае, я хочу, чтобы .bash_profileuser1 автоматически получал данные от пользователя root при использовании su.

Что я должен делать?

(Это работало раньше! Однажды, это просто не источник. Может быть, что-то изменило настройки в Bash? Это работает, когда я вхожу source .bash_profileпосле входа в систему.)

Я использую Mac и OS X Yosemite.

Sirion
источник

Ответы:

11

Оболочка по умолчанию для rootOS X - /bin/sh. Это shтакже версия bash, но когда вызывается с именем shBash :

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

При вызове в качестве интерактивной оболочки входа в систему или в качестве неинтерактивной оболочки с --loginпараметром сначала выполняется попытка чтения и выполнения команд из /etc/profileи ~/.profileв указанном порядке. ... оболочка, вызванная как sh, не пытается читать и выполнять команды из любых других файлов запуска

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


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

Другой подход состоит в том, чтобы просто изменить ваш suвызов, чтобы принудительно выполнить его bashнемедленно.

Учитывая то, что вы сказали, я, вероятно, рекомендую символическую ссылку, но вы можете посмотреть изменения, которые вносит режим POSIX в Bash, и решить, хотите вы их иметь или нет.

Майкл Гомер
источник
5

Потому что он не рассматривается как «оболочка входа в систему» ​​(которая вызывается непосредственно из loginили sshd), а как простая «интерактивная оболочка». Смотрите здесь, например: https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

Поэтому принудительно suиспользуйте опцию входа в систему, т.е. с -lопцией:

su -l

Или поместите вашу среду в .bashrcфайл.

myaut
источник
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 до пользователя root.

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

Ламберт
источник