Le commande set permet d'obtenir la liste des variables paramétrées pour le shell courant.
$ set
BASH=/bin/bash
HOME=/home/toto
HOSTNAME=myhostname
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h$
PS2='> '
PS4='+ '
SHELL=/bin/bash
...
Le caractère $ permet d'obtenir la valeur d'une variable :
$ echo $BASH
/bin/bash
Pour créer ou modifier une variable :
$ VARIABLE='valeur'
$ echo $VARIABLE
valeur
Attention, car toutes variables créées ou modifiées de cette manière ne sont valables que pour la session en cours.
$ MAVARIABLE='<= Ceci est le contenu de ma variable =>'
$ echo $MAVARIABLE
<= Ceci est le contenu de ma variable =>
Les principales variables :
HOME : cette variable contient le chemin du répertoire d'accueil de l'utilisateur.
PATH : cette variable contient une liste de répertoire dans lesquels le shell recherche toutes les commandes qui sont exécutées.
Si une commande est exécutée et qu'elle ne se trouve dans aucun des répertoires indiqués dans la variable PATH, une erreur sera retournée en indiquant que la commande est introuvable.
Si l'on souhaite exécuter une commande qui se trouve dans un répertoire non indiqué dans la variable PATH, il suffit tout simplement de modifier le contenu de la variable.
$ PATH=$PATH:/leRepertoireDeMaCommande
Pour modifier la variable PATH définitivement, il suffit d'ajouter une ligne au fichier ~/.bashrc :
> export PATH=$PATH:/mon_autre_repertoire
Ou modifier directement le fichier /etc/environment :
> PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/mon_autre_repertoire"
Pour exécuter une commande présente dans le répertoire courant, il suffit d'ajouter à la variable PATH la valeur ":." ou ":".
PWD : cette variable contient le chemin du répertoire courant.
PS1 : cette variable contient la chaine de caractères correspondant au prompt ($ en règle générale).
Pour faire apparaitre la valeur du répertoire courant dans le prompt :
$ PS1='$PWD$ '
ou
$ PS1='\w$ '
BASH : Séquence d'échappement permettant de paramétrer la variable PS1
Séquence échappement | Valeur |
---|---|
\u | Nom de l'utilisateur |
\h | Nom de la machine |
\w | Répertoire courant |
\W | Partie terminale du répertoire courant |
PS2 : cette variable contient la chaine de caractères correspondant au prompt secondaire (> en règle générale).
$ echo 'ceci est le début
> de ma chaine de texte
> et tant que je ne saisi pas
> le caractère apostrophe
> ça continue
> '
ceci est le début
de ma chaine de texte
et tant que je ne saisi pas
le caractère apostrophe
ça continue
$
$ mail toto<<fin
> un autre exemple
>
> fin
$
TERM : cette variable contient le type du terminal de l'utilisateur.
LOGNAME : cette variable contient le nom de l'utilisateur connecté.
Il est parfois nécessaire d'exporter une variable car toutes ne le sont pas.
Pour savoir quelles sont les variables exportées d'office il suffit d'utiliser la commande env.
$ env
TERM=xterm
SHELL=/bin/bash
CDPATH=:.:/home/
USER=toto
...
Pour exporter une variable :
$ MAVARIABLE='maValeur'
$ export MAVARIABLE
ou
$ export MAVARIABLE='maValeur'
Par exemple, en BASH, pour utiliser le programme nano (éditeur de texte) comme éditeur par défaut du programme mutt (client mail en ligne de commande), il suffit d'inscrire dans son fichier ~/.bashrc :
export EDITOR=/usr/bin/nano
et pour une prise en compte immédiate, sans être obligé de se reconnecter, saisir dans la console :
$ export EDITOR=/usr/bin/nano
Et pour vérifier :
$ set | grep EDITOR
EDITOR=/usr/bin/nano
$ env | grep EDITOR
EDITOR=/usr/bin/nano
Pour activer ou désactiver les options du shell, il suffit d'utiliser la commande set avec les options -o et +o.
Activation :
$ set -o option
Désactivation :
$ set +o option
Pour visualiser la liste des options disponibles ainsi que leur état, saisir dans une console :
$ set -o
allexport off
braceexpand on
emacs on
errexit off
errtrace off
functrace off
hashall on
histexpand on
history on
ignoreeof off
interactive-comments on
keyword off
monitor on
noclobber off
noexec off
noglob off
nolog off
notify off
nounset off
onecmd off
physical off
pipefail off
posix off
privileged off
verbose off
vi off
xtrace off
Détails de certaines options :
Pour quitter le shell, il existe 3 méthodes :
Si l'option ignoreeof est activée, il n'est plus possible de quitter le shell en appuyant sur ^d.
Quand une redirection est faite vers un fichier déjà existant, celui-çi est automatiquement écrasé sans confirmation. Pour inverser se fonctionnement, il suffit d'activer l'option noclobber.
On vérifie l'état de l'option noclobber
$ set -o | grep noclobber
noclobber off
On redirige le résultat de la commande ls vers le fichier liste
$ ls -l > liste
On redirige le résultat de la commande pwd vers le fichier liste déjà existant
$ pwd > liste
On active l'option noclobber
$ set -o noclobber
On vérifie que l'option noclobber est bien activée
$ set -o | grep noclobber
noclobber on
On redirige le résultat de la commande pwd vers le fichier liste déjà existant
$ pwd > liste
-bash: liste : impossible d'écraser le fichier existant
On force la redirection de la commande pwd vers le fichier liste déjà existant
$ pwd >| liste
Ces 2 options permettent de paramétrer le rappel des commandes.
En ksh, ces 2 options sont désactivées.
En bash, seule l'option emacs est activée.
Cette option est utilisée pour déboguer les scripts shell.
Les alias permettent de créer des raccourcis vers des commandes et de les personnaliser.
Pour visualiser la liste des alias déjà existant :
$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -lF'
alias ls='ls --color=auto'
alias tarc='tar -cvzf'
alias tarx='tar -xvzf'
Pour visualiser un alias en particulier :
$ alias la
alias la='ls -A'
Pour créer un alias :
$ alias c='clear'
$ alias rm='rm -i'
$ rm liste
rm : supprimer fichier «liste» ? y
En bash, pour créer un alias définitivement, il suffit de le renseigner dans le fichier ~/.bashrc
Pour supprimer un alias :
$ unalias c
$ c
c : commande introuvable
Le shell enregistre toutes les commandes saisies dans un fichier texte.
En bash, il s'agit du fichier ~/.bash_history
En ksh, il s'agit du fichier ~/.sh_history
Pour utiliser le rappel des commandes, le shell utilise soit emacs soit vi.
En bash, c'est l'option emacs qui est activée par défaut mais il est possible d'utiliser vi.
En ksh, les 2 options sont par défaut désactivées.
Le choix d'activer l'un, désactive l'autre.
$ set -o | grep "^emacs\|^vi"
emacs on
vi off
Pour les utilisateurs non habitués à l'éditeur vi, il est préférable d'utiliser emacs car le rappel des commandes se fait avec les flèches du clavier.
Les fichiers d'environnement sont utilisés pour stocker de manière permanente tout le paramétrage de l'environnement de l'utilisateur.
Ce sont des scripts shell qui contiennent un ensemble de commandes Linux.
Certains scripts sont exécutés uniquement par le shell de connexion et d'autres par un shell ordinaire.
Le shell de connexion est lancé immédiatement après l'identification de l'utilisateur.
Le shell de connexion exécute en premier le script /etc/profile. Ce script contient le paramétrage commun à tous les utilisateurs.
Il recherche ensuite dans le répertoire d'accueil de l'utilisateur un script dont le nom dépend du shell utilisé.
En sh / ksh :
Le script de connexion se nomme ~/.profile
En bash :
L'un des 3 scripts suivants dans l'ordre
En bash, le shell de connexion exécute en premier le script /etc/profile, puis le script ~/.profile et enfin le script ~/.bashrc.
C'est dans ce dernier fichier, ~/.bashrc, que l'on peut définir de nouveaux alias, exporter automatiquement de nouvelles variables, paramétrer l'auto-complétion, définir les variables PS1 et PS2, paramétrer le nombre de commandes à historiser, etc etc.