Existe um arquivo equivalente ".bashrc" lido por todos os shells?


105

É ~/.bashrc o único local para especificar variáveis ​​de ambiente específicas do usuário, aliases, modificações na PATHvariável, etc.?

Eu pergunto porque parece que ~/.bashrcparece ser bashapenas, mas existem outras conchas também ...

Respostas:


94

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.


7
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.

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


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.

  1. bashlê de .bash_profileou.bashrc
  2. zshlê .zprofile e .zshrc
  3. 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"/.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:


14

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.