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