Les fichiers de démarrage du shell Bash

Le programme shell /bin/bash (que l'on nommera simplement "le shell" à partir de maintenant) utilise une collection de fichiers de démarrage pour aider à la création d'un environnement de travail. Chaque fichier a une utilisation spécifique et peut affecter différemment la connexion et les environnements interactifs. Les fichiers dans le répertoire /etc apportent habituellement une configuration globale. Si un fichier équivalent existe dans votre répertoire personnel, il pourrait écraser les paramètrages globaux.

Un shell interactif de connexion est lancé après une identification positive, en utilisant /bin/login en lisant le fichier /etc/passwd. Un shell interactif, sans login, est lancé à la ligne de commande (c'est-à-dire [invite]$/bin/bash). Un shell non-interactif est présent habituellement lorsqu'un script shell tourne. Il est non interactif parce qu'il exécute un script et n'attends pas d'entrée utilisateur entre les commandes.

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

Les fichiers suivants sont utilisés pour s'assurer que l'environnement correct est établi pour chacune des façons dont le shell peut être appelé: /etc/profile et son équivalent privé ~/.bash_profile, et /etc/bashrc (non officiel) et son équivalent privé et ~/.bashrc.

Le fichier ~/.bash_logout n'est pas utilisé pour une invocation du shell. Il est lu par le shell quand un utilisateur se déconnecte du système.

Les fichiers /etc/profile et ~/.bash_profile sont lus quand le shell est invoqué comme shell interactif de connexion. Le fichier ~/.bashrc est lu quand le shell est invoqué comme shell interactif sans fonction de connexion.

Aussi utiles sont les fichiers /etc/dircolors et ~/.dircolors appelés à partir de /etc/profile. Ils contrôlent les sorties colorisées de commandes comme ls --color.

Voici la base d'un /etc/profile. Les commentaires sur ce fichier devraient expliquer tout ce dont vous avez besoin. Pour plus d'informations sur les séquences d'échappement que vous pouvez utiliser pour votre invite (par exemple, la variable d'environnement PS1), voir info bash -- Noeud: Imprimer une invite.

cat > /etc/profile << "EOF"
# Begin /etc/profile
# Ecrit pour Beyond Linux From Scratch
# par James Robertson <jameswrobertson@earthlink.net>

# Variables d'environnement globales et programmes de démarrage

# Les alias systèmes et les fonctions doivent aller dans /etc/bashrc. Les
# variables d'environnements et les programmes de lancement personnels doivent
# aller dans ~/.bash_profile. Les alias et fonctions personnels doivent aller
# dans ~/.bashrc.

# Fonction d'aide à la gestion des chemins.
pathman () {
	if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
		if [ "$2" = "last" ] ; then
			PATH=$PATH:$1
		else
			PATH=$1:$PATH
		fi
	fi
}

# Ajout au chemin standard.
if [ $(id -u) = 0 ] ; then
	if [ -d "/usr/local/sbin" ] ; then
		pathman /usr/local/sbin last
	fi
fi

if [ $(id -u) != 0 ] ; then
	if [ -d "/usr/local/bin" ] ; then
		pathman /usr/local/bin last
	fi
fi

if [ -d "/usr/X11R6/bin" ] ; then
	pathman /usr/X11R6/bin last
fi

# Configuration de quelques variables d'environnement.
HISTSIZE=1000
HISTIGNORE="&:[bf]g:exit"
PS1="[\u@\h \w]\\$ "

# Configuration de la variable d'environnement INPUTRC.
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then
	INPUTRC=/etc/inputrc
fi

# Configuration de /bin/ls pour activer le support de la couleur, l'alias se
# trouve dans /etc/bashrc.
if [ -f "/etc/dircolors" ] ; then
	eval $(dircolors -b /etc/dircolors)

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

export PATH HISTSIZE HISTIGNORE PS1 LS_COLORS INPUTRC

# Fin /etc/profile
EOF

Voici la base d'un /etc/bashrc. Les commentaires dans le fichier devraient expliquer tout ce dont vous avez besoin. Si vous voulez que chaque nouvel utilisateur dispose automatiquement de ce fichier, changez simplement la sortie de la commande suivante par /etc/skel/.bash_profile et vérifiez les droits après avoir lancé la commande. Vous pouvez ensuite copier /etc/skel/.bash_profile dans le répertoire personnel de chaque utilisateur déjà existant, y compris root, et configurer le propriétaire et le groupe de façon approprié.

cat > /etc/bashrc << "EOF"
# Begin /etc/bashrc
# Ecrit pour Beyond Linux From Scratch 
# par James Robertson <jameswrobertson@earthlink.net>

# Alias système et fonctions.

# Les alias systèmes et les fonctions doivent aller dans /etc/bashrc. Les
# variables d'environnements et les programmes de lancement personnels doivent
# aller dans ~/.bash_profile. Les alias et fonctions personnels doivent aller
# dans ~/.bashrc.

# Par défaut, nous voulons mettre en place le masque utilisateur (umask).
# Même pour les shells non interactifs et sans login.
if [ "$(id -gn)" = "$(id -un)" -a $(id -u) -gt 99 ] ; then
	umask 002
else
	umask 022
fi

# Met à disposition une commande /bin/ls colorisée. Utilisé avec du code de
# /etc/profile.
alias ls='ls --color=auto'

# Propose une invite pour les shells non interactifs, spécialement ceux lancés
# depuis l'environnement xfree. [Voir la liste de mails archivés titrée
# "PS1 Environment variable" pour une grande étude de cas de ce script.]
export PS1="[\u@\h \w]\\$ "

# Fin /etc/bashrc
EOF

Voici la base d'un ~/.bash_profile. Les commentaires dans le fichier devraient expliquer tout ce dont vous avez besoin.

# Début ~/.bash_profile
# Ecrit pour Beyond Linux From Scratch
# par James Robertson <jameswrobertson@earthlink.net>

# Variables d'environnement et programmes de lancement personnels.

# Les alias systèmes et les fonctions doivent aller dans /etc/bashrc. Les
# variables d'environnements et les programmes de lancement personnels doivent
# aller dans ~/.bash_profile. Les alias et fonctions personnels doivent aller
# dans ~/.bashrc.

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

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

export PATH 

# Fin ~/.bash_profile

Voici la base d'un ~/.bashrc. Les commentaires dans le fichier devraient expliquer tout ce dont vous avez besoin. Les commentaires et instructions sur l'utilisation de /etc/skel pour .bash_profile ci-dessus s'appliquent ici aussi. Seuls les noms des fichiers cibles sont différents.

# Début ~/.bashrc
# Ecrit pour Beyond Linux From Scratch
# par James Robertson <jameswrobertson@earthlink.net>

# Alias et fonctions personnels.

# Les alias systèmes et les fonctions doivent aller dans /etc/bashrc. Les
# variables d'environnements et les programmes de lancement personnels doivent
# aller dans ~/.bash_profile. Les alias et fonctions personnels doivent aller
# dans ~/.bashrc.

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

# Fin ~/.bashrc

Voici la base d'un ~/.bash_logout. Les commentaires dans le fichier devraient expliquer tout ce dont vous avez besoin.

# Début ~/.bash_logout
# Ecrit pour Beyond Linux From Scratch
# par James Robertson <jameswrobertson@earthlink.net>

# Eléments personnels exécutés à la fin de la connexion.

# Fin ~/.bash_logout

Si vous voulez utiliser la capacité dircolors, alors lancez la commande suivante. Les étapes de configuration de /etc/skel vues ci-dessus peuvent aussi être utilisées ici pour procurer un fichier .dircolors lorsqu'un nouvel utilisateur est configuré. Comme auparavent, modifiez simplement le nom de fichier en sortie sur la commande suivante et assurez-vous que les droits, propiétaire et groupe sont corrects sur les fichiers créés et/ou copiés.

/bin/dircolors -p > /etc/dircolors

Ian Macdonald a écrit une excellente collection d'astuces en tout genre pour améliorer l'environnement de votre shell. Vous pouvez la lire en ligne sur http://www.caliban.org/bash/index.shtml.