GNU/Linux >> Tutoriels Linux >  >> Linux

Quel est l'emplacement correct pour la variable Shell PS1 ?

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 via su - <user> ou lors de la connexion à distance via ssh ), 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

Linux
  1. Comment affecter la sortie d'une commande à une variable Shell ?

  2. Quel est le but du fichier .bashrc sous Linux

  3. Portée variable pour les scripts shell bash et les fonctions dans le script

  4. Quel est l'emplacement correct du fichier mysql.sock sous Linux

  5. Emplacement de .bashrc pour Bash sur Ubuntu sous Windows dans Windows 10

Qu'est-ce qu'un dotfile shell peut faire pour vous

Qu'est-ce que le Shell sous Linux ?

Qu'est-ce que le sous-shell sous Linux ?

Comprendre la boucle for dans les scripts shell

Quel est le mot de passe root par défaut pour MySQL 5.7

Quel est l'emplacement d'installation conventionnel des applications sous Linux ?