Потому что она не считается "оболочкой для входа" (которая вызывается непосредственно из login
или sshd
), а простой "интерактивной оболочкой". Смотрите здесь, например: https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html
Таким образом, используйте опцию su
для входа в систему, т.е. опцию -l
:
su -l
или поместите ваше окружение в файл .bashrc
.
Оболочкой по умолчанию для root
в OS X является /bin/sh
. Его sh
также является версией bash
, но при вызове с именем sh
Bash:
пытается максимально точно воспроизвести поведение при запуске исторических версий
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
немедленно.
Учитывая то, что Вы сказали, я бы, вероятно, порекомендовал использовать сим-ссылку, но Вы, возможно, захотите взглянуть на изменения, которые Bash's POSIX mode производит и решить, хотите ли Вы их иметь или нет.
Пользователь 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-файл корневого пользователя.