Вопрос «куда пихать алиасы, в .bashrc или .bash_profile» я слышал чаще, чем «а почему у меня ничего не работает». Эти два файла — как два админа в одной комнате: вроде делают одно дело, но каждый в своём стиле и в своё время.

.bashrc — парень на каждый день

Запускается каждый раз, когда открываешь новый интерактивный терминал.

Что туда обычно пихают:

  • алиасы (alias ll='ls -lah')
  • функции для терминала
  • переменные среды, нужные именно в интерактивке (PS1, EDITOR, PATH и прочее)

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

.bash_profile — встречает с утра

Запускается один раз при логине. Это может быть SSH, вход через tty, графический логин, что угодно.

Что туда пихают:

  • глобальные переменные среды, нужные не только в терминале
  • всякое, что должно отработать только раз (например, запуск агента SSH)

Частая практика: внутри .bash_profile вызвать .bashrc, чтобы всё, что нужно для интерактивки, тоже подтянулось. Например:

if [ -f ~/.bashrc ]; then
    source ~/.bashrc
fi 

Где подлянка

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

Как жить, чтобы не материться

  • Всё, что относится к терминалу — в .bashrc.
  • Всё, что должно жить во всей сессии — в .bash_profile.
  • Если боишься забыть, просто в .bash_profile сделай source ~/.bashrc. Это не убьёт тебя, но спасёт от «почему у меня нет алиасов по SSH».

Заключение

.bashrc и .bash_profile — это не «или-или». Это «каждый в своём месте». Один на повседневку, другой на приём гостей. Путаешь — получаешь бардак, дубли, странные баги и кучу ненужных нервов. Хочешь работать чисто — держи их раздельно, но дружно.