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


10

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

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

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



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в неинтерактивном режиме на самом деле вполне может считаться неожиданной), а также любая проверка какого-либо чувствительного к безопасности контекста.
Жиль "ТАК - перестань быть злым"

Есть ли этот метод для предотвращения петель?
Брайам

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.