Порядок загрузки файлов (.bashrc, .zshrc etc.) при запуске Zsh/Bash

If you have ever put something in a file like .bashrc and had it not work, or are confused by why there are so many different files — .bashrc.bash_profile.bash_login.profile etc. — and what they do, this is for you.

The issue is that Bash sources from a different file based on what kind of shell it thinks it is in. For an “interactive non-login shell”, it reads .bashrc, but for an “interactive login shell” it reads from the first of .bash_profile, .bash_login and .profile (only). There is no sane reason why this should be so; it’s just historical. Follows in more detail.

For Bash, they work as follows. Read down the appropriate column. Executes A, then B, then C, etc. The B1, B2, B3 means it executes only the first of those files found.

 Interactive loginInteractive non-loginScript
/etc/profileA  
/etc/bash.bashrc A 
~/.bashrc B 
~/.bash_profileB1  
~/.bash_loginB2  
~/.profile   
BASH_ENV  A
    
~/.bash_logoutC  
/images/BashStartupFiles1.png

* ‎Они вошли в систему с помощью TTY, а не через графический интерфейс пользователя‎
* ‎они вошли в систему удаленно, например через ssh.‎

‎Если оболочка была запущена ‎‎каким-либо‎‎ другим способом, например, через gnome-терминал GNOME или ‎‎konsole‎‎KDE, то это, как правило, не оболочка входа в систему — оболочка входа была тем, что запускало GNOME или KDE за вашей спиной, когда вы входили в систему; вещи, начатые заново, не являются оболочками входа. Новые терминалы или новые экранные окна, которые вы открываете, также не являются оболочками входа. (Запуск нового окна в Terminal.app OS X, похоже, считается оболочкой входа в систему.)‎

So typically (or sooner or later), what you will encounter are non-login shells. So this case is what you should write your config files for. This means putting most of your stuff in ~/.bashrc, having exactly one of ~/.bash_profile~/.bash_login, and ~/.profile, and sourcing ~/.bashrc from it. If you have nothing that you specifically want to happen only for login shells, you can even symlink one of the three to ~/.bashrc. In fact, even if you do, it is probably a good idea to have only file, as follows:

‎Почти все должно идти в разделе «общая конфигурация». Могут быть некоторые команды (те, которые производят вывод и т. Д.), Которые вы хотите выполнять только тогда, когда оболочка интерактивна, а не в скриптах, которые вы можете поместить в первый «условный раздел». Я не вижу смысла использовать остальное. Вы можете опустить строки «эхо», но сохранить «:» — это команды, которые ничего не делают и нужны, если этот раздел пуст.‎

‎Затем вам нужно иметь только файл, и вы можете вызвать это‎ ~/.bashrc and do cd && ln -s .bashrc .bash_profile

For zsh: [Note that zsh seems to read ~/.profile as well, if ~/.zshrc is not present.]

 Interactive loginInteractive non-loginScript
/etc/zshenvAAA
~/.zshenvBBB
/etc/zprofileC  
~/.zprofileD  
/etc/zshrcEC 
~/.zshrcFD 
/etc/zloginG  
~/.zloginH  
    
    
~/.zlogoutI  
/etc/zlogoutJ  

ВЫВОД:

Для bash, ‎поместите материал в‎ ~/.bashrc, ‎и сделайте ~/.bash_profile источником.
Для zsh, поместите материал в‎ ~/.zshrc, ‎который всегда выполняется‎.

[‎Замечание: ‎‎Это при условии, что вы используете только интерактивные оболочки (оболочки, в которых вы можете вводить команды)‎. ‎Если вы в дальнейшем будете использовать неинтерактивные оболочки‎ (такие как “ssh [хост] [команда]”, которые исполняют [команду] по адресу [хост] и незамедлительно отключаются) ‎и‎ есть что-то, что вы абсолютно абсолютно хотите выполнить первым, даже для этих случаев‎ ‎(подумайте хорошенько: они могут вмешиваться странным образом, и вы можете обойтись без них‎), ‎тогда вы можете поместить такие вещи в‎ ~/.zshenv. Для bash,‎ поместите их в файл и установите для значения BASH_ENV имя файла‎.]

Вам может также понравиться...