Почему корень не получает .bash_profile?

for f in *; do mv -- "$f" "99999$f"; done
10
13.03.2018, 12:46
3 ответа

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

Таким образом, используйте опцию su для входа в систему, т.е. опцию -l:

su -l

или поместите ваше окружение в файл .bashrc.

5
27.01.2020, 20:00

Оболочкой по умолчанию для 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 производит и решить, хотите ли Вы их иметь или нет.

11
27.01.2020, 20:00

Пользователь 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-файл корневого пользователя.

5
27.01.2020, 20:00

Теги

Похожие вопросы