Le PS1
variable shell doit être défini dans ~/.bashrc
pour le bash
shell car c'est le fichier d'initialisation qui est lu pour les sessions shell interactives.
Notez que cette variable est une variable shell , pas une variable d'environnement (cela n'a pas de sens de laisser les processus enfants hériter de sa valeur, et c'est seulement le shell actuel qui l'utilise). Il n'a donc pas besoin d'être exporté avec export
.
Connexe :
- Quel est l'objectif de .bashrc et comment fonctionne-t-il ?
Vous ne devriez pas avoir besoin de démarrer bash
à partir de n'importe quel fichier de démarrage du shell. Démarrer un shell particulier à partir de ~/.profile
(ou le fichier correspondant lié à votre shell de connexion) peut éventuellement être justifié si le système sur lequel vous exécutez ne vous permet pas de modifier votre shell de connexion. Il faut veiller à ne pas démarrez l'autre shell si c'est le shell qui exécute déjà le fichier, ou vous risquez de vous retrouver dans une sorte de boucle infinie.
Le exec
code que vous ajoutez à votre ~/.bash_profile
ne devrait jamais être nécessaire. Je suppose que c'est un moyen d'obtenir ~/.bashrc
à analyser (il démarre un shell interactif et un bash
interactif les shells lisent ~/.bashrc
). Une meilleure façon de faire serait d'avoir l'un des fichiers source de l'autre, par exemple en utilisant ceci dans ~/.bash_profile
:
if [[ -f $HOME/.bashrc ]]; then
source "$HOME/.bashrc"
fi
Ensuite, définissez PS1
en ~/.bashrc
(il ne devrait pas être nécessaire de toucher HOME
ou TERM
).
L'autre chose que fait la commande est de nettoyer toutes les autres variables d'environnement en utilisant env -i
. Sauf si vous avez des raisons très précises pour ce faire, vous ne devez pas le faire à partir de vos fichiers de démarrage ordinaires du shell.
Pour citer la page de manuel bash :
When bash is invoked as an interactive login shell, or as a non-interactive
shell with the --login option, it first reads and executes commands from the
file /etc/profile, if that file exists. After reading that file, it looks
for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads
and executes commands from the first one that exists and is readable. The
--noprofile option may be used when the shell is started to inhibit this
behavior.
When a login shell exits, bash reads and executes commands from the file
~/.bash_logout, if it exists.
When an interactive shell that is not a login shell is started, bash reads
and executes commands from /etc/bash.bashrc and ~/.bashrc, if these files
exist. This may be inhibited by using the --norc option. The --rcfile file
option will force bash to read and execute commands from file instead of
/etc/bash.bashrc and ~/.bashrc.
Cela dépend donc beaucoup de la façon dont vous démarrez le shell.
- Si vous souhaitez avoir votre
PS1
actif dans toutes les connexions shells (par exemple viasu - <user>
ou lors de la connexion à distance viassh
), mettez-le dans profil . - Si vous souhaitez avoir votre
PS1
actif dans tous les non-login shells (par exemple, simplement ouvrir un autre terminal dans votre environnement de bureau), mis dans bashrc . - Si vous voulez qu'il soit actif dans les deux cas, vous devrez le mettre dans les deux fichiers, ou (ce que certaines versions de Linux font au moins dans le cas du système /etc/profile et /etc/bash.bashrc ), source le .bashrc dans le .profile .
PS1
doit être en .bashrc
. Vous pouvez également le définir dans .profile
.
Debian source .bashrc à partir de là :
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi