Les fichiers de démarrage du shell Bash

Le programme de shell /bin/bash (auquel on se référera ci-après sous le nom de « shell » utilise un ensemble de fichiers de démarrage pour aider à la création d'un environnement. Chaque fichier a une utilisation spécifique et il peut concerner différemment la connexion et les environnements interactifs. Les fichiers du répertoire /etc fournissent en général les paramètres globaux. Si un fichier équivalent existe dans votre répertoire home, il peut remplacer les paramètres globaux.

Un shell de connexion interactif démarre après une connexion réussie, en utilisant /bin/login, en lisant le fichier /etc/passwd. Cet appel du shell lit normalement /etc/profile et son équivalent privé ~/.bash_profile (ou ~/.profile s'il est appelé par /bin/sh) au démarrage.

Un shell de non-connexion interactif démarre normalement en ligne de commande en utilisant un programme de shell (comme [prompt]$/bin/bash) ou par la commande /bin/su. Un shell de non-connexion interactif démarre également avec un programme de terminal tel que xterm ou konsole depuis un environnement graphique. Ce type d'appel de shell copie normalement l'environnement parent puis lit le fichier ~/.bashrc de l'utilisateur pour des instructions de configuration de démarrage supplémentaires.

Un shell non interactif est présent en général lorsqu'un script shell s'exécute. Il n'est pas interactif car il exécute un script et n'attend pas d'entrée de l'utilisateur entre les commandes. Pour ces appels de shell, seul l'environnement hérité du shell parent est utilisé.

Le fichier ~/.bash_logout n'est pas utilisé pour un appel du shell. Il est lu et exécuté lorsqu'un utilisateur quitte un shell de connexion interactif.

De nombreuses distributions utilisent /etc/bashrc pour l'initialisation pour tout le système de shells de non-connexion. Ce fichier est en général appelé depuis le fichier ~/.bashrc de l'utilisateur et il n'est pas construit directement dans bash lui-même. On suit cette convention dans cette section.

Pour plus d'informations, voir info bash -- Nodes: Bash Startup Files et Interactive Shells.

[Note]

Note

La plupart des instructions ci-dessous sont utilisées pour créer des fichiers qui se trouvent dans la structure de répertoires /etc, ce qui implique que vous exécutiez les commandes en tant qu'utilisateur root. Si vous optez plutôt pour la création des fichiers dans le répertoire home de l'utilisateur, vous devriez lancer les commandes en tant qu'utilisateur non privilégié.

Notes utilisateur : http://wiki.linuxfromscratch.org/blfs/wiki/bash-shell-startup-files

/etc/profile

Here is a base /etc/profile. This file starts by setting up some helper functions and some basic parameters. It specifies some bash history parameters and, for security purposes, disables keeping a permanent history file for the root user. It also sets a default user prompt. It then calls small, single purpose scripts in the /etc/profile.d directory to provide most of the initialization.

Pour plus d'informations sur les séquences d'échappement que vous pouvez utiliser pour votre invite (à savoir la variable d'environnement PS1) voir info bash -- Node: Printing a Prompt.

cat > /etc/profile << "EOF"
# Begin /etc/profile
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>
# modifications by Dagmar d'Surreal <rivyqntzne@pbzpnfg.arg>

# System wide environment variables and startup programs.

# System wide aliases and functions should go in /etc/bashrc.  Personal
# environment variables and startup programs should go into
# ~/.bash_profile.  Personal aliases and functions should go into
# ~/.bashrc.

# Functions to help us manage paths.  Second argument is the name of the
# path variable to be modified (default: PATH)
pathremove () {
        local IFS=':'
        local NEWPATH
        local DIR
        local PATHVARIABLE=${2:-PATH}
        for DIR in ${!PATHVARIABLE} ; do
                if [ "$DIR" != "$1" ] ; then
                  NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
                fi
        done
        export $PATHVARIABLE="$NEWPATH"
}

pathprepend () {
        pathremove $1 $2
        local PATHVARIABLE=${2:-PATH}
        export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}"
}

pathappend () {
        pathremove $1 $2
        local PATHVARIABLE=${2:-PATH}
        export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1"
}

export -f pathremove pathprepend pathappend

# Set the initial path
export PATH=/bin:/usr/bin

if [ $EUID -eq 0 ] ; then
        pathappend /sbin:/usr/sbin
        unset HISTFILE
fi

# Setup some environment variables.
export HISTSIZE=1000
export HISTIGNORE="&:[bf]g:exit"

# Set some defaults for graphical systems
export XDG_DATA_DIRS=${XDG_DATA_DIRS:-/usr/share/}
export XDG_CONFIG_DIRS=${XDG_CONFIG_DIRS:-/etc/xdg/}
export XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR:-/tmp/xdg-$USER}

# Setup a red prompt for root and a green one for users.
NORMAL="\[\e[0m\]"
RED="\[\e[1;31m\]"
GREEN="\[\e[1;32m\]"
if [[ $EUID == 0 ]] ; then
  PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL"
else
  PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL"
fi

for script in /etc/profile.d/*.sh ; do
        if [ -r $script ] ; then
                . $script
        fi
done

unset script RED GREEN NORMAL

# End /etc/profile
EOF

Le répertoire /etc/profile.d

Maintenant créez le répertoire /etc/profile.d, où sont mis les scripts d'initialisation individuels :

install --directory --mode=0755 --owner=root --group=root /etc/profile.d

/etc/profile.d/bash_completion.sh

[Note]

Note

Using the bash completion script below is controversial. Not all users like it. It adds many (usually over 1000) lines to the bash environment and makes it difficult to use the 'set' command to examine simple environment variables. Omitting this script does not interfere with the ability of bash to use the tab key for file name completion.

Ce script importe les scripts de complétion bash, installé par beaucoup d'autres paquets BLFS pour permettre la complétion de la ligne de commande avec TAB.

cat > /etc/profile.d/bash_completion.sh << "EOF"
# Begin /etc/profile.d/bash_completion.sh
# Import bash completion scripts

# If the bash-completion package is installed, use its configuration instead
if [ -f /usr/share/bash-completion/bash_completion ]; then

  # Check for interactive bash and that we haven't already been sourced.
  if [ -n "${BASH_VERSION-}" -a -n "${PS1-}" -a -z "${BASH_COMPLETION_VERSINFO-}" ]; then

    # Check for recent enough version of bash.
    if [ ${BASH_VERSINFO[0]} -gt 4 ] || \
       [ ${BASH_VERSINFO[0]} -eq 4 -a ${BASH_VERSINFO[1]} -ge 1 ]; then
       [ -r "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion" ] && \
            . "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion"
       if shopt -q progcomp && [ -r /usr/share/bash-completion/bash_completion ]; then
          # Source completion code.
          . /usr/share/bash-completion/bash_completion
       fi
    fi
  fi

else

  # bash-completions are not installed, use only bash completion directory
  if shopt -q progcomp; then
    for script in /etc/bash_completion.d/* ; do
      if [ -r $script ] ; then
        . $script
      fi
    done
  fi
fi

# End /etc/profile.d/bash_completion.sh
EOF

Assurez-vous que le répertoire existe :

install --directory --mode=0755 --owner=root --group=root /etc/bash_completion.d

Pour une installation plus complète, voir http://wiki.linuxfromscratch.org/blfs/wiki/bash-shell-startup-files#bash-completions.

/etc/profile.d/dircolors.sh

Ce script utilise les fichiers ~/.dircolors et /etc/dircolors pour contrôler les couleurs des noms de fichiers dans la liste du contenu d'un répertoire. Ils contrôlent la sortie en couleurs de commandes telles que ls --color. L'explication de la façon d'initialiser ces fichiers se trouvent à la fin de cette section.

cat > /etc/profile.d/dircolors.sh << "EOF"
# Setup for /bin/ls and /bin/grep to support color, the alias is in /etc/bashrc.
if [ -f "/etc/dircolors" ] ; then
        eval $(dircolors -b /etc/dircolors)
fi

if [ -f "$HOME/.dircolors" ] ; then
        eval $(dircolors -b $HOME/.dircolors)
fi

alias ls='ls --color=auto'
alias grep='grep --color=auto'
EOF

/etc/profile.d/extrapaths.sh

Ce script ajoute plusieurs chemins utiles aux variables d'environnement PATH et peut être utilisé pour personnaliser les autres variables d'environnement relatives à PATH (par exemple LD_LIBRARY_PATH, etc) qui peuvent être utiles pour tous les utilisateurs.

cat > /etc/profile.d/extrapaths.sh << "EOF"
if [ -d /usr/local/lib/pkgconfig ] ; then
        pathappend /usr/local/lib/pkgconfig PKG_CONFIG_PATH
fi
if [ -d /usr/local/bin ]; then
        pathprepend /usr/local/bin
fi
if [ -d /usr/local/sbin -a $EUID -eq 0 ]; then
        pathprepend /usr/local/sbin
fi

# Set some defaults before other applications add to these paths.
pathappend /usr/share/man  MANPATH
pathappend /usr/share/info INFOPATH
EOF

/etc/profile.d/readline.sh

Ce script règle le fichier de configuration inputrc par défaut. Si l'utilisateur n'a pas de paramètres individuels, il utilise le fichier global.

cat > /etc/profile.d/readline.sh << "EOF"
# Setup the INPUTRC environment variable.
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then
        INPUTRC=/etc/inputrc
fi
export INPUTRC
EOF

/etc/profile.d/umask.sh

Le paramétrage de la valeur umask est important pour la sécurité. Ici, les droits d'écriture par défaut du groupe sont désactivés pour les utilisateurs systèmes et quand le nom d'utilisateur et le nom du groupe ne sont pas les mêmes.

cat > /etc/profile.d/umask.sh << "EOF"
# By default, the umask should be set.
if [ "$(id -gn)" = "$(id -un)" -a $EUID -gt 99 ] ; then
  umask 002
else
  umask 022
fi
EOF

/etc/profile.d/i18n.sh

Ce script règle une variable d'environnement nécessaire au support des langues natives. Vous pouvez trouver un point complet sur la détermination de cette variable sur la page Fichiers de démarrage du shell bash de LFS.

cat > /etc/profile.d/i18n.sh << "EOF"
# Set up i18n variables
export LANG=<ll>_<CC>.<charmap><@modifiers>
EOF

Autres valeurs d'Initialisation

On peut facilement ajouter d'autres réglages à profile en ajoutant des scripts supplémentaires au répertoire /etc/profile.d.

/etc/bashrc

Voici un /etc/bashrc de base. Les commentaires dans ce fichier devraient vous expliquer tout ce dont vous avez besoin.

cat > /etc/bashrc << "EOF"
# Begin /etc/bashrc
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>
# updated by Bruce Dubbs <bdubbs@linuxfromscratch.org>

# System wide aliases and functions.

# System wide environment variables and startup programs should go into
# /etc/profile.  Personal environment variables and startup programs
# should go into ~/.bash_profile.  Personal aliases and functions should
# go into ~/.bashrc

# Provides colored /bin/ls and /bin/grep commands.  Used in conjunction
# with code in /etc/profile.

alias ls='ls --color=auto'
alias grep='grep --color=auto'

# Provides prompt for non-login shells, specifically shells started
# in the X environment. [Review the LFS archive thread titled
# PS1 Environment Variable for a great case study behind this script
# addendum.]

NORMAL="\[\e[0m\]"
RED="\[\e[1;31m\]"
GREEN="\[\e[1;32m\]"
if [[ $EUID == 0 ]] ; then
  PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL"
else
  PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL"
fi

unset RED GREEN NORMAL

# End /etc/bashrc
EOF

~/.bash_profile

Here is a base ~/.bash_profile. If you want each new user to have this file automatically, just change the output of the command to /etc/skel/.bash_profile and check the permissions after the command is run. You can then copy /etc/skel/.bash_profile to the home directories of already existing users, including root, and set the owner and group appropriately.

cat > ~/.bash_profile << "EOF"
# Begin ~/.bash_profile
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>
# updated by Bruce Dubbs <bdubbs@linuxfromscratch.org>

# Personal environment variables and startup programs.

# Personal aliases and functions should go in ~/.bashrc.  System wide
# environment variables and startup programs are in /etc/profile.
# System wide aliases and functions are in /etc/bashrc.

if [ -f "$HOME/.bashrc" ] ; then
  source $HOME/.bashrc
fi

if [ -d "$HOME/bin" ] ; then
  pathprepend $HOME/bin
fi

# Having . in the PATH is dangerous
#if [ $EUID -gt 99 ]; then
#  pathappend .
#fi

# End ~/.bash_profile
EOF

~/.profile

Voici un ~/.profile de base. Les commentaires et les instructions d'utilisation de /etc/skel pour .bash_profile ci-dessus s'appliquent aussi ici. Seuls les noms de fichiers cibles sont différents.

cat > ~/.profile << "EOF"
# Begin ~/.profile
# Personal environment variables and startup programs.

if [ -d "$HOME/bin" ] ; then
  pathprepend $HOME/bin
fi

# Set up user specific i18n variables
#export LANG=<ll>_<CC>.<charmap><@modifiers>

# End ~/.profile
EOF

~/.bashrc

voici un fichier ~/.bashrc de base.

cat > ~/.bashrc << "EOF"
# Begin ~/.bashrc
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>

# Personal aliases and functions.

# Personal environment variables and startup programs should go in
# ~/.bash_profile.  System wide environment variables and startup
# programs are in /etc/profile.  System wide aliases and functions are
# in /etc/bashrc.

if [ -f "/etc/bashrc" ] ; then
  source /etc/bashrc
fi

# Set up user specific i18n variables
#export LANG=<ll>_<CC>.<charmap><@modifiers>

# End ~/.bashrc
EOF

~/.bash_logout

This is an empty ~/.bash_logout that can be used as a template. You will notice that the base ~/.bash_logout does not include a clear command. This is because the clear is handled in the /etc/issue file.

cat > ~/.bash_logout << "EOF"
# Begin ~/.bash_logout
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>

# Personal items to perform on logout.

# End ~/.bash_logout
EOF

/etc/dircolors

If you want to use the dircolors capability, then run the following command. The /etc/skel setup steps shown above also can be used here to provide a ~/.dircolors file when a new user is set up. As before, just change the output file name on the following command and assure the permissions, owner, and group are correct on the files created and/or copied.

dircolors -p > /etc/dircolors

Si vous souhaitez personnaliser les couleurs utilisées pour différents types de fichiers, vous devez éditer le fichier /etc/dircolors. Les instructions pour régler les couleurs sont comprises dans le fichier.

Enfin, Ian Macdonald a écrit un ensemble excellent de modèles et de bidouillages pour améliorer votre environnement de shell. Vous pouvez le lire en ligne sur http://www.caliban.org/bash/index.shtml.

Last updated on 2020-03-25 15:07:11 +0000