Existe-t-il un fichier équivalent «.bashrc» lu par tous les shells?
105
Le ~/.bashrc seul endroit pour spécifier des variables d'environnement, des alias, des modifications de PATHvariable, etc. spécifiques à l'utilisateur ?
Je demande parce qu'il semble que cela ~/.bashrcsemble être- bashseulement, mais d'autres coquilles existent aussi…
Le fichier $HOME/.profileest utilisé par un certain nombre d'obus, notamment bash, sh, dash et éventuellement d'autres.
De la page de manuel de bash:
Lorsque bash est appelé en tant que 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, puis lit et exécute les commandes à partir de la première qui existe et est lisible.
csh et tcsh ne regardent pas explicitement ~/.profilemais ces coquilles sont un peu dépassées.
Zsh par défaut ne lit pas .profile. C'est pourquoi j'ai supprimé ma réponse précédente en déclarant ceci. Zsh ne lit que .profile quand il est appelé par un lien symbolique nommé sh.
fschmitt
10
tcsh est toujours populaire dans certains environnements.
Maciej Piechotka
1
fschmitt: merci pour la correction; fixé. Maciej Piechotka: Je ne doute pas que c'est vrai. Cependant, il est également possible (bien que compliqué) de créer des scripts * rc qui importent d'autres scripts rc particuliers en fonction du shell sous lequel ils s'exécutent.
msw
1
Pour que cette méthode fonctionne, les utilisateurs doivent s'assurer que chaque shell est un shell de connexion. Par exemple, dans Gnome Terminal, accédez à Profil -> Titre et commande, puis activez-le Run command as a login shell. Vous devez également supprimer ~/.bash_profileou rendre le code source ~/.profile.
Mikel
@fschmitt Vous pouvez aussi utiliser votre source $HOME/.profiledepuis votre Zsh .zshrc. J'ai tendance à mettre tous mes objets de shell portables .profileet ensuite je peux les partager dans n'importe quel environnement dans lequel je pourrais basculer.
Benjamin R
56
~/.profileest le bon endroit pour les définitions de variable d'environnement et pour les programmes non graphiques que vous voulez 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 type Bourne (sh, ksh, bash). Zsh s'exécute à la ~/.zprofileplace, et Csh et tcsh sont exécutés ~/.login.
Si vous vous connectez sous un gestionnaire d'affichage X (xdm, gdm, kdm, ...), ~/.profileson exécution dépend de la configuration de votre gestionnaire d'affichage et peut-être de l'environnement de bureau par votre distribution. Si vous vous connectez sous une «session personnalisée», cela s'exécute généralement ~/.xsession.
~/.bashrcest le bon endroit pour les paramètres spécifiques à bash, tels que les alias, les fonctions, les options du shell et les invites. Comme son nom l'indique, il est spécifique à bash; csh a ~/.cshrc, ksh a ~/.kshrcet zsh a <roulement de tambour> ~/.zshrc.
N'oubliez pas que zsh contient également des .zloginéléments .zprofilequi suivent.zshrc (mais uniquement pour les shells de connexion). Voir la FAQ ZSH
Geeb le
21
Il n'y a pas de fichier commun, mais vous pouvez faire en sorte que chaque shell lise depuis un fichier commun.
bashlit à partir .bash_profileou.bashrc
zshlit de .zprofileet.zshrc
kshlit à partir .profileou$ENV
Alors voici 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"/.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)
Si vous avez un accès root au système, vous pouvez également le configurer pam_env.
Tu peux mettre
session optional pam_env.so user_envfile=.env
dans le /etc/pam.dfichier approprié (par exemple /etc/pam.d/common-sessionsur Debian), puis lorsque l'utilisateur se connecte, PAMlira les variables d'environnement à partir de ~/.env.
Notez que, pam_envfondamentalement, ne prend en charge que les VAR=valueentrées.
Run command as a login shell
. Vous devez également supprimer~/.bash_profile
ou rendre le code source~/.profile
.$HOME/.profile
depuis votre Zsh.zshrc
. J'ai tendance à mettre tous mes objets de shell portables.profile
et ensuite je peux les partager dans n'importe quel environnement dans lequel je pourrais basculer.~/.profile
est le bon endroit pour les définitions de variable d'environnement et pour les programmes non graphiques que vous voulez exécuter lorsque vous vous connectez (par exemplessh-agent
,screen -m
). Il est exécuté par votre shell de connexion s'il s'agit d'un shell de type Bourne (sh, ksh, bash). Zsh s'exécute à la~/.zprofile
place, et Csh et tcsh sont exécutés~/.login
.Si vous vous connectez sous un gestionnaire d'affichage X (xdm, gdm, kdm, ...),
~/.profile
son exécution dépend de la configuration de votre gestionnaire d'affichage et peut-être de l'environnement de bureau par votre distribution. Si vous vous connectez sous une «session personnalisée», cela s'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 du shell et les invites. Comme son nom l'indique, il est spécifique à bash; csh a~/.cshrc
, ksh a~/.kshrc
et zsh a <roulement de tambour>~/.zshrc
.Voir aussi:
Différence entre .bashrc et .bash_profile
Quels fichiers d'installation doivent être utilisés pour configurer des variables d'environnement avec bash?
Zsh ne frappe pas ~ / .profile
la source
.zlogin
éléments.zprofile
qui suivent.zshrc
(mais uniquement pour les shells de connexion). Voir la FAQ ZSHIl n'y a pas de fichier commun, mais vous pouvez faire en sorte que chaque shell lise depuis un fichier commun.
bash
lit à partir.bash_profile
ou.bashrc
zsh
lit de.zprofile
et.zshrc
ksh
lit à partir.profile
ou$ENV
Alors voici ce que je fais:
~/.env
~/.shrc
~/.bashrc
~/.zshenv
~/.zshrc
~/.profile
~/.bash_profile
~/.zlogin
~/.zprofile
Si vous avez un accès root au système, vous pouvez également le configurer
pam_env
.Tu peux mettre
dans le
/etc/pam.d
fichier approprié (par exemple/etc/pam.d/common-session
sur Debian), puis lorsque l'utilisateur se connecte,PAM
lira les variables d'environnement à partir de~/.env
.Notez que,
pam_env
fondamentalement, ne prend en charge que lesVAR=value
entrées.Plus d'informations:
la source
Il n’existe pas de fichier de configuration d’environnement pour différents shells, car il est même spécifique à leur shell comment ils sont définis.
En csh vous utilisez
setenv
en bash vous utilisezexport
pour les définir.Quoi qu'il en soit, vous pouvez écrire votre propre fichier de configuration et l'inclure
source
dans les fichiers de points de vos shells.la source