bashдействует по-разному, будь то оболочка или обычный язык программирования (например, perlили python).
В соответствии с проектом, настройки ~/.bash_profile, ~/.bashrcи т.д., для пользователей , чтобы установить вещи , когда bashиграет роль оболочки (Войти оболочки, interractive оболочки). Подумайте о среде, в которой вы находитесь xterm(интерактивная оболочка) или sshсеансах (оболочка входа в систему) или в консолях (оболочка входа в систему).
С другой стороны, bashэто также мощный язык программирования - подумайте о многих сценариях для управления службами, systemd- который требует другого стиля работы. Например, когда разработчик пишет системный скрипт или bashпрограмму, он / она не хочет автоматически получать исходный текст пользователя ~/.bash_profile. Это нормальная программа, а не оболочка. Обычная программа (включая bashпрограммы) естественным образом наследует настройки от текущего рабочего средства (оболочки), но не устанавливает их.
Если мы напишем программу для cronin bash- это просто произойдет bash; на самом деле, мы можем записать его в pythonили perlили любой другой progamming Язык- тогда мы можем иметь опцию источники bash«s ~/.bash_profile(читай: настройка оболочки пользователя, который как раз случается быть тот же язык вашего языка программирования):
[ -f /home/user/.bash_profile ] && . /home/user/.bash_profile
Однако что, если этот конкретный пользователь не использует в bashкачестве своей оболочки? Он / она может использовать zsh, ksh, fishи т.д. Таким образом, эта практика будет на самом деле не работать при написании программы для общественного пользования.
Таким образом, вы можете найти источник, ~/.bash_profileесли вы думаете, что это сработает. Но здесь речь идет не о том, можем ли мы получить файл, а о том, как все должно работать в системе: концепции дизайна . Вкратце: мы должны рассматривать bashкак нечто, имеющее 2 роли: оболочку и язык программирования . Тогда все будет намного легче понять.
.bashrcесть строка, которая не позволяет ему работать в неинтерактивных оболочках.