Оболочка по умолчанию для 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
для изменения оболочки root (отмечая, что /etc/passwd
она не используется для определения оболочки в OS X). Вы можете проверить текущую оболочку root с помощью dscl . -read /Users/root UserShell
; сверьтесь с документацией и тщательно подумайте, прежде чем менять ее на что-то другое.
Другой подход состоит в том, чтобы просто изменить ваш su
вызов, чтобы принудительно выполнить его bash
немедленно.
Учитывая то, что вы сказали, я, вероятно, рекомендую символическую ссылку, но вы можете посмотреть изменения, которые вносит режим POSIX в Bash, и решить, хотите вы их иметь или нет.