É ~/.bashrc
o único lugar para especificar variáveis de ambiente específicas do usuário, aliases, modificações na variável PATH
, etc?
Eu pergunto porque parece que ~/.bashrc
parece ser bash
- apenas, mas existem outras conchas também…
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 logon 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 para ~/.profile
mas essas conchas são meio antiquadas.
~/.profile
É o local 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 executa ~/.zprofile
E Csh e tcsh executam ~/.login
.
Se você efetuar login em um gerenciador de exibição X (xdm, gdm, kdm, ...), a execução de ~/.profile
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 executa ~/.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 tem ~/.cshrc
, ksh tem ~/.kshrc
e zsh tem <drumroll> ~/.zshrc
.
Veja também:
Não existe um arquivo comum, mas você pode fazer com que todos os Shell leiam de um arquivo comum.
bash
lê de .bash_profile
ou .bashrc
zsh
lê de .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 relevante /etc/pam.d
arquivo (por exemplo, /etc/pam.d/common-session
no Debian) e, quando o usuário efetuar login, PAM
lerá 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, usa export
para defini-los.
De qualquer forma, você pode escrever seu próprio arquivo de configuração e incluí-lo com source
nos arquivos de ponto de seus shells.