Respostas:
O arquivo $HOME/.profileé usado por vários shells, incluindo bash, sh, dash e possivelmente outros.
Na página do manual do bash:
Quando o bash é chamado como um shell de login interativo, ... ele primeiro lê e executa comandos do arquivo / etc / profile, se esse arquivo existir. Depois de ler esse arquivo, ele procura ~ / .bash_profile, ~ / .bash_login e ~ / .profile, nessa ordem, e lê e executa comandos do primeiro que existe e é legível.
csh e tcsh explicitamente não olham, ~/.profilemas esses shells são meio antiquados.
Run command as a login shell. Você também precisa remover ~/.bash_profileou torná-lo fonte ~/.profile.
$HOME/.profilede dentro do seu Zsh .zshrc. Eu costumo colocar todas as minhas coisas de shell portáteis .profilee então posso compartilhá-las em qualquer ambiente que eu possa alternar.
~/.profileé o lugar certo para definições de variáveis de ambiente e para programas não gráficos que você deseja executar quando efetuar login (por exemplo ssh-agent, screen -m). Ele é executado pelo seu shell de login se for um shell no estilo Bourne (sh, ksh, bash). O Zsh é executado ~/.zprofilee Csh e tcsh ~/.login.
Se você efetuar logon em um gerenciador de exibição X (xdm, gdm, kdm, ...), a ~/.profileexecução depende de como o gerenciador de exibição e, talvez, o ambiente da área de trabalho foram configurados pela sua distribuição. Se você fizer login em uma "sessão personalizada", isso geralmente é executado ~/.xsession.
~/.bashrcé o lugar certo para configurações específicas do bash, como aliases, funções, opções de shell e prompts. Como o nome indica, é específico ao bash; csh possui ~/.cshrc, ksh possui ~/.kshrce zsh possui <drumroll> ~/.zshrc.
Consulte também:
Diferença entre .bashrc e .bash_profile
Quais arquivos de instalação devem ser usados para configurar variáveis de ambiente com o bash?
Zsh não pressionando ~ / .profile
.zloginalém do .zprofileque é executado depois .zshrc (mas apenas para shells de login). Veja as Perguntas frequentes sobre
Não há arquivo comum, mas você pode fazer com que cada shell seja lido de um arquivo comum.
bashlê de .bash_profileou.bashrczshlê .zprofile e .zshrckshlê de .profileou$ENVEntão, aqui está o que eu faço:
~/.env
# Put environment variables here, e.g.
PATH=$PATH:$HOME/bin
~/.shrc
test -f "$HOME/.env" && . "$HOME/.env"
# Put interactive shell setup here, e.g.
alias ll='ls -l'
PS1='$PWD$ '
set -o emacs
~/.bashrc
test -f ~/.shrc && source ~/.shrc
# Put any bash-specific settings here, e.g.
HISTFILE=~/.bash_history
shopt -s extglob
IGNOREEOF=yes
~/.zshenv
# Put any zsh-specific settings for non-interactive and interactive sessions, e.g.
setopt braceexpand
setopt promptsubst
setopt shwordsplit
~/.zshrc
test -f ~/.shrc && source ~/.shrc
# Put any zsh-specific interactive settings here, e.g.
HISTFILE=~/.zsh_history
setopt ignoreeof
~/.profile
# Interactive sub-shells source .env, unless this is bash or zsh,
# because they already sourced .env in .bashrc or .zshrc.
if test -z "$BASH_VERSION" -a -z "$ZSH_VERSION" || test -n "$BASH_VERSION" -a \( "${BASH##*/}" = "sh" \)
then
test -f "$HOME"/.env && . "$HOME"/.env
fi
# The name is confusing, but $ENV is ksh's config file for interactive sessions,
# so it's equivalent to .bashrc or .zshrc.
# Putting this here makes running an interactive ksh from any login shell work.
test -f "$HOME"/.shrc && export ENV="$HOME"/.shrc
# Put any login shell specific commands here, e.g.
ssh-add
stty -ixon
~/.bash_profile
source ~/.bashrc
source ~/.profile
~/.zlogin
# zsh sources .zshrc automatically, only need to source .profile
source ~/.profile
~/.zprofile
(empty)
Se você tiver acesso root ao sistema, outra maneira é configurar pam_env.
Você pode colocar
session optional pam_env.so user_envfile=.env
no /etc/pam.darquivo relevante (por exemplo, /etc/pam.d/common-sessionno Debian) e, quando o usuário efetuar login, PAMlerá as variáveis de ambiente de ~/.env.
Observe que pam_envbasicamente suporta apenas VAR=valueentradas.
Mais informações:
Não existe um arquivo de configuração de ambiente para diferentes shells, porque é mesmo específico do shell como eles são definidos.
No csh você usa setenvno bash exportpara defini-los.
De qualquer forma, você pode escrever seu próprio arquivo de configuração e incluí-lo sourcenos arquivos de ponto dos seus shells.