Есть ли файл Bash, который будет всегда получен в интерактивном режиме, независимо от того, является ли он логином или не логином?

10

Насколько я знаю, интерактивные оболочки могут быть логином или не логином, а файлы запуска для них разные.

  • Если интерактивный + Войти оболочки → /etc/profileзатем первый читаемый ~/.bash_profile, ~/.bash_loginи~/.profile
  • Если интерактивная + не авторизованная оболочка → /etc/bash.bashrcто~/.bashrc

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

S182
источник
1
@strugee Нет, этот вопрос не о переменных среды.
Жиль "ТАК - перестань быть злым"
@ Жиль, да, но ваш ответ применим одинаково хорошо.
стружка,
1
@strugee Это потому, что я вышел за рамки непосредственного вопроса и затронул второстепенную тему. Один абзац в одном ответе не делает дубликат. Вопросы являются дубликатами, только если они имеют практически идентичные ответы, а не если один ответ содержит достаточно материала, чтобы ответить на второй.
Жиль "ТАК - перестань быть злым"

Ответы:

10

Нет, нет Да, это дефект дизайна.

Используйте следующий контент в ~/.bash_profile:

if [ -e ~/.profile ]; then . ~/.profile; fi
if [[ -e ~/.bashrc && $- = *i* ]]; then . ~/.bashrc; fi

Остерегайтесь того, что bash имеет еще более странную причуду: когда это неинтерактивная оболочка входа в систему, а родительский процесс - rshdили sshd, источники bash ~/.bashrc(но не ~/.bash_profileили ~/.profile). Таким образом, вы можете поставить это в верхней части вашего .bashrc:

if [[ $- != *i* ]]; then return; fi

См. Также Разница между .bashrc и .bash_profile и Разница между Оболочкой входа в систему и Оболочкой без регистрации?

Жиль "ТАК - перестань быть злым"
источник
Эти причуды по соображениям безопасности (не загружайте неожиданные файлы при работе в настройках, чувствительных к безопасности).
vonbrand
2
@ Vonbrand Э, что? Нет, эти причуды не имеют абсолютно никакого отношения к безопасности. Здесь не задействованы «неожиданные файлы» (за исключением того, что загрузка .bashrcв неинтерактивном режиме на самом деле вполне может считаться неожиданной), а также любая проверка какого-либо чувствительного к безопасности контекста.
Жиль "ТАК - перестань быть злым"
Есть ли этот метод для предотвращения петель?
Брайам
1
@Braiam Какие петли?
Жиль "ТАК - перестань быть злым"