Est ~/.bashrc
le seul endroit pour spécifier des variables d'environnement spécifiques à l'utilisateur, des alias, des modifications à la variable PATH
, etc.?
Je demande parce qu'il semble que ~/.bashrc
semble être bash
- uniquement, mais d'autres shells existent aussi…
Le fichier $HOME/.profile
est utilisé par un certain nombre de shells, dont bash, sh, dash et éventuellement d'autres.
Depuis la page de manuel de bash:
Lorsque bash est invoqué comme un shell de connexion interactif, ... il lit et exécute d'abord les commandes du fichier/etc/profile, si ce fichier existe. Après avoir lu ce fichier, il recherche ~/.bash_profile, ~/.bash_login et ~/.profile, dans cet ordre, et lit et exécute les commandes du premier qui existe et est lisible.
csh et tcsh ne regardent pas explicitement ~/.profile
mais ces coquilles sont un peu désuètes.
~/.profile
est le bon endroit pour les définitions de variables d'environnement et pour les programmes non graphiques que vous souhaitez exécuter lorsque vous vous connectez (par exemple ssh-agent
, screen -m
). Il est exécuté par votre shell de connexion s'il s'agit d'un shell de style Bourne (sh, ksh, bash). Zsh exécute ~/.zprofile
à la place, et Csh et tcsh exécutent ~/.login
.
Si vous vous connectez sous un gestionnaire d'affichage X (xdm, gdm, kdm, ...), que ~/.profile
est exécuté dépend de la façon dont votre gestionnaire d'affichage et peut-être l'environnement de bureau ont été configurés par votre distribution. Si vous vous connectez sous une "session personnalisée", cela exécute généralement ~/.xsession
.
~/.bashrc
est le bon endroit pour les paramètres spécifiques à bash, tels que les alias, les fonctions, les options Shell et les invites. Comme son nom l'indique, il est spécifique à bash; csh a ~/.cshrc
, ksh a ~/.kshrc
, et zsh a <drumroll> ~/.zshrc
.
Voir également:
Il n'y a pas de fichier commun, mais vous pouvez faire lire chaque Shell à partir d'un fichier commun.
bash
lit à partir de .bash_profile
ou .bashrc
zsh
lit à partir de .zprofile
et.zshrc
ksh
lit à partir de .profile
ou $ENV
Voici donc ce que je fais:
~/.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)
Si vous disposez d'un accès root au système, une autre méthode consiste à configurer pam_env
.
Vous pouvez mettre
session optional pam_env.so user_envfile=.env
dans le /etc/pam.d
fichier (par exemple /etc/pam.d/common-session
sur Debian), puis lorsque l'utilisateur se connecte, PAM
lira les variables d'environnement de ~/.env
.
Notez que pam_env
ne prend en charge que VAR=value
entrées.
Plus d'informations:
Il n'y a rien de tel qu'un fichier de configuration d'environnement pour différents shells, car son même Shell spécifie comment ils sont définis.
Dans csh vous utilisez setenv
dans bash vous utilisez export
pour les définir.
Quoi qu'il en soit, vous pouvez écrire votre propre fichier de configuration et l'inclure avec source
dans les fichiers dot de vos shells.