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.
O Zsh, por padrão, não lê .profile. Por isso, apaguei minha resposta anterior afirmando isso. O Zsh só lê .profile quando é chamado por um link simbólico chamado sh.
Fschmitt 13/10/10
10
O tcsh ainda é popular em alguns ambientes.
Maciej Piechotka 13/10/10
1
fschmitt: obrigado pela correção; fixo. Maciej Piechotka: Não tenho dúvidas de que é verdade; no entanto, também é possível (embora complicado) criar scripts * rc que importam outros scripts rc específicos com base no shell em que estão sendo executados.
msw
1
Para que essa maneira funcione, os usuários precisam garantir que cada shell seja um shell de logon. Por exemplo, no Gnome Terminal, vá para Perfil -> Título e comando e ative Run command as a login shell. Você também precisa remover ~/.bash_profileou torná-lo fonte ~/.profile.
26413 Mikel
@fschmitt Você também pode obter fontes $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.
Benjamin R
56
~/.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.
Não se esqueça que o zsh também possui .zloginalém do .zprofileque é executado depois.zshrc (mas apenas para shells de login). Veja as Perguntas frequentes sobre
Geeb
21
Não há arquivo comum, mas você pode fazer com que cada shell seja lido de um arquivo comum.
bashlê de .bash_profileou.bashrc
zshlê .zprofilee.zshrc
kshlê de .profileou$ENV
Entã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"/.envfi# 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.
Run command as a login shell
. Você também precisa remover~/.bash_profile
ou torná-lo fonte~/.profile
.$HOME/.profile
de dentro do seu Zsh.zshrc
. Eu costumo colocar todas as minhas coisas de shell portáteis.profile
e 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 exemplossh-agent
,screen -m
). Ele é executado pelo seu shell de login se for um shell no estilo Bourne (sh, ksh, bash). O Zsh é executado~/.zprofile
e Csh e tcsh~/.login
.Se você efetuar logon em um gerenciador de exibição X (xdm, gdm, kdm, ...), a
~/.profile
execuçã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~/.kshrc
e 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
fonte
.zlogin
além do.zprofile
que é executado depois.zshrc
(mas apenas para shells de login). Veja as Perguntas frequentes sobreNão há arquivo comum, mas você pode fazer com que cada shell seja lido de um arquivo comum.
bash
lê de.bash_profile
ou.bashrc
zsh
lê.zprofile
e.zshrc
ksh
lê de.profile
ou$ENV
Então, aqui está o que eu faço:
~/.env
~/.shrc
~/.bashrc
~/.zshenv
~/.zshrc
~/.profile
~/.bash_profile
~/.zlogin
~/.zprofile
Se você tiver acesso root ao sistema, outra maneira é configurar
pam_env
.Você pode colocar
no
/etc/pam.d
arquivo relevante (por exemplo,/etc/pam.d/common-session
no Debian) e, quando o usuário efetuar login,PAM
lerá as variáveis de ambiente de~/.env
.Observe que
pam_env
basicamente suporta apenasVAR=value
entradas.Mais informações:
fonte
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
setenv
no bashexport
para defini-los.De qualquer forma, você pode escrever seu próprio arquivo de configuração e incluí-lo
source
nos arquivos de ponto dos seus shells.fonte