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, ~/.profile
mas esses shells são meio antiquados.
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 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 ~/.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
.zlogin
além do .zprofile
que é 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.
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
# 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.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 apenas VAR=value
entradas.
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 setenv
no bash export
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.