Nous donnons ci-dessous des exemples pour les shells les plus
courants. Nous commen�ons avec zsh
car il offre des possibilit�s
qui facilitent grandement notre t�che. Nous progresserons ensuite vers des
exemples de plus en plus difficiles.
Dans tous les exemples ci-dessous, on teste la variable d'environnement TERM pour �tre certain de n'appliquer ces s�quences que si l'on est dans un xterm (ou d�riv�). Le test est fait sur TERM=xterm*, de mani�re � inclure au passage les variantes telles que TERM=xterm-color (d�fini par rxvt).
Encore une remarque au sujet des d�riv�s du C shell tels que tcsh
et csh
. Dans ces shells, les variables non-d�finies causent des
erreurs fatales. Il est d�s lors n�cessaire avant de tester la valeur de la
variable $TERM
, de tester si elle existe pour ne pas
interrompre un shell non-interactif. Pour y parvenir, il faut inclure les
exemples ci-dessous dans quelque chose du genre :
if ($?TERM) then
...
endif
(� notre avis, il s'agit d'une raison parmi beaucoup d'autres de ne
pas utiliser les C shells. Voir Csh Programming Considered Harmful pour une
discussion utile).Pour utiliser les exemples suivants, placez-les dans le fichier
d'initialisation du shell apropri�, c'est-�-dire un fichier lu lors du
lancement d'un shell interactif. Le plus souvent il s'agit de
.shellrc
(ex : .zshrc
, .tcshrc
, etc.)
On utilise quelques fonctions et codes offerts par zsh
:
precmd () fonction ex�cut�e juste avant chaque invite
chpwd () fonction ex�cut�e lors de chaque changement de r�pertoire
\e code du caract�re escape (ESC)
\a code du caract�re bip (BEL)
%n code remplac� par $USERNAME
%m code remplac� par le hostname jusqu'au premier '.'
%~ code remplac� par le r�pertoire, avec '~' � la place de $HOME
De nombreux autres codes sont disponibles, voir 'man zshmisc'.Ainsi, le code suivant, mis dans ~/.zshrc, affiche "nom@serveur:r�pertoire" dans le titre de la fen�tre (et de l'ic�ne).
case $TERM in
xterm*)
precmd () {print -Pn "\e]0;%n@%m: %~\a"}
;;
esac
On arrive au m�me r�sultat en utilisant chpwd()
au lieu de
precmd()
. La commande interne print
fonctionne comme
echo
, mais donne acc�s aux s�quences %
.tcsh
offre des possibilit�s similaires � celles de
zsh
:
precmd () fonction ex�cut�e juste avant chaque invite
chpwd () fonction ex�cut�e lors de chaque changement de r�pertoire
%n code remplac� par $USERNAME
%m code remplac� par le hostname jusqu'au premier '.'
%~ code remplac� par le r�pertoire, avec '~' � la place de $HOME
Malheureusement, il n'y a pas d'�quivalent � la fonction print de
zsh
qui permette d'utiliser les codes de l'invite dans la cha�ne
du titre ; le mieux que l'on puisse faire est d'utiliser les variables du
shell (dans ~/.tcshrc
) :
switch ($TERM)
case "xterm*":
alias precmd 'echo -n "\033]0;${HOST}:$cwd\007"'
breaksw
endsw
mais on obtient alors le chemin complet du r�pertoire, sans '~'. Par
contre, on peut mettre la cha�ne dans l'invite :
switch ($TERM)
case "xterm*":
set prompt="%{\033]0;%n@%m:%~\007%}tcsh%# "
breaksw
default:
set prompt="tcsh%# "
breaksw
endsw
ce qui donne "tcsh%
" comme invite, et
"nom@serveur: r�pertoire
" dans
le titre (et l'ic�ne) de xterm. Les "%{...%}"
doivent �tre plac�s autour des s�quences d'�chappement (et ne peuvent pas
�tre le dernier �l�ment de l'invite, 'man tcsh' donne plus de d�tails).bash
offre la variable PROMPT_COMMAND
qui contient une
commande � ex�cuter avant d'afficher l'invite. Ce code (ins�r� dans
~/.bashrc
) affiche nom@serveur: r�pertoire
dans le titre de la fen�tre (et de l'ic�ne).
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
o� \033
est le caract�re ESC
et \007
BEL
.Il convient de noter que les guillemets jouent un r�le important : les
variables entre "..."
sont �valu�es, alors que celles entre
"..."
ne le sont pas. Ainsi, PROMPT_COMMAND
re�oit bien le nom des variables, ces derni�res �tant �valu�es lorsque
PROMPT_COMMAND
est invoqu�e.
Cependant, $PWD
donne le r�pertoire complet. Si l'on veut
utiliser le raccourci ~
, il faut placer toute la s�quence
d'�chappement dans l'invite pour avoir acc�s aux codes suivants :
\u est remplac� par $USERNAME
\h est remplac� par le hostname jusqu'au premier '.'
\w est remplac� par le repertoire, avec '~' � la place de $HOME
\[...\] signale une suite de caract�re non-imprimables
Ainsi le code suivant produit l'invite bash$
, et place
nom@serveur: r�pertoire
dans le titre (et l'ic�ne) de
xterm.
case $TERM in
xterm*)
PS1="\[\033]0;\u@\h: \w\007\]bash\$ "
;;
*)
PS1="bash\$ "
;;
esac
L'utilisation de \[...\]
signale �
bash
la pr�sence de caract�res non-imprimables, information dont
il a besoin lorsqu'il calcule la longueur de l'invite. Sans cette
pr�caution, les commandes d'�dition de ligne ne savent plus tr�s bien o�
placer le curseur.ksh
n'offre pas grand chose en terme de fonctions et codes, il
faut donc mettre notre cha�ne dans l'invite pour qu'elle soit mise � jour
dynamiquement. L'exemple suivant produit l'invite ksh$
, et
place nom@serveur: r�pertoire
dans le titre (et l'ic�ne) de
xterm.
case $TERM in
xterm*)
HOST=`hostname`
PS1='^[]0;${USER}@${HOST}: ${PWD}^Gksh$ '
;;
*)
PS1='ksh$ '
;;
esac
Cependant, $PWD
donne le r�pertoire complet. On peut �ter
le pr�fixe $HOME/
en utilisant la construction
${...##...}
. De m�me, on peut tronquer le
nom du serveur � l'aide de
${...%%...}
.
HOST=`hostname`
HOST=${HOST%%.*}
PS1='^[]0;${USER}@${HOST}: ${PWD##${HOME}/}^Gksh$ '
Les caract�res ^[
et ^G
d�signent
ESC
et BEL
(ils peuvent �tre saisis dans emacs � l'aide
de C-q ESC
et C-q C-g
).C'est assez difficile � r�aliser avec csh
. On finit par mettre ce
qui suit dans le ~/.cshrc :
switch ($TERM)
case "xterm*":
set host=`hostname`
alias cd 'cd \!*; echo -n "^[]0;${user}@${host}: ${cwd}^Gcsh% "'
breaksw
default:
set prompt='csh% '
breaksw
endsw
Il a fallu faire un alias de la commande cd
pour mettre � jour
l'invite. Les caract�res ^[
et ^G
d�signent ESC
et BEL
(ils peuvent �tre saisis dans emacs
� l'aide de C-q ESC
et C-q C-g
).Notes : sur certains syst�mes hostname -s
peut �tre utilis�
pour obtenir le nom de la machine au lieu du nom qualifi�. Les utilisateurs
ayant des liens symboliques sur des r�pertoires trouveront `pwd`
plus pr�cis que $cwd
.
Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:21