Qu'est ce qu'un terminal peut faire pour vous ?
L'«invite» ou «prompt» est, dans un terminal, le ou les caractères qui vous «invitent» à entrer vos ordres.
Ils diffèrent selon l'utilisateur:
- «#» Administrateur.
- «$» Autres utilisateurs.
Cette invite est configurée selon les interpréteurs de commandes par la variable «prompt» en général et peut présenter des invites plus ou moins confortables voire tout à fait farfelues.
Bases
La variable prompt
pour les CSH-like et PS1
pour les BASH-like contient le formatage de l'invite.
Par exemple:
set prompt="%B[%n@%m]%b%/:"
ou, pour modifier en plus la barre de titre dans un Xterm:
set ellipsis set prompt='%{^[]0;%n@%m, %.03, %P^G%}%B[%n@%m]%b%/:'
la variable ellipsis
modifie les caractères qui résument un chemin trop long, «…» au lieu de «<n>».
david:/<2>sys/amd64/conf>set ellipsis david:...sys/amd64/conf>pwd /usr/src/sys/amd64/conf
«…» masque les répertoire depuis la racine.
david:...sys/amd64/conf>unset ellipsis david:/<2>sys/amd64/conf>pwd /usr/src/sys/amd64/conf
«<n>» ou n est le nombre d’occurrences masquées depuis la racine. De même promptchar
défini le caractère de l'invite pour un utilisateur et pour root
:
set promptchars = \$\#
A droiiiite, droite
Oui, on peut ajouter une information à droite, de la même manière:
set rprompt="%d %D %w %Y"
Mais qu'est ce que c'est que ce charabia ?
Le caractère d'échappement est le signe %
, suivi d'un caractère qui va définir quelques variables, mais qui peuvent varier selon les shells.
- Qui?
%n
: Who the fuck are you ?%m
,%M
: la machine hôte, avec ou sans détails.%n@%m
-%M
:light@david -david.dmarec.homeunix.net
%#
: L'invite selon que l'on soitroot
ou un utilisateur, selonpromptchars
.
- Où ?
%/
: Chemin actuel complet%~
: Chemin actuel, utilisant ~%c0 n
,%C0 n
: Une combinaison du chemin actuel, sur n niveaux, ~, ou pas.0
: utilise une ellipsis en tête, soit<1>
ou…
si la variableellipsis
est définie.%.xx
: Chemin actuel, sur xx niveaux.%h
: un index d'historique.%l
: Le terminal utilisé
- Quand ?
%T
,%t
: heure actuelle, aux formats 12 et 24h.%P
: comme précédemment, avec les secondes%d
,%D
: Jour de la semaine, en lettres et en chiffres%w
,%W
: Mois en lettres et en chiffres%y
,%Y
: année sur deux ou trois chiffres.
set prompt="%P - %d %D%s %Y" 18:09:14 - Sat 31 2009
- Coloriage
%B
,%b
: je grasse, ou pas.%U
,%u
: je souligne, ou pas.%S
,%s
: inversion des couleurs
- trucs de ouf
%{xxxxx%}
: super séquence d'échappement, au delà du prompt et du shell, appelle les séquences du terminal.%?
: Code de retour de la dernière commande.
Terminal
Les interpréteurs vous permettent de changer l'invite selon le terminal, dans leur fichier de configuration, script de ressources lu au chargement:
- .cshrc
switch ($TERM) case "xterm*": set prompt="%{^[]0;%n@%m, %c03, %P ^G%}%n:%C04%#" breaksw default: set prompt="%n:%c03%#" endsw
Ici, on utilise une commande de XTerm qui permet de changer la «décoration» de sa fenêtre.
Set Text Parameters of VT window OSC Ps ; Pt BEL
- Ps = 0 → Change Icon Name and Window Title to Pt
^
, signifieControl
^[
, signifieControl[
, soitESC
, on peut aussi l'écrire:\033
ou encore\e
OSC
: Operating System Command, soit:ESC ]
BEL
: la sonnette, Control-G:^G
ou\007
Sous les autres interpréteurs, comme ZSH, vous devez définir une fonction precmd
pour obtenir le même résultat:
- .zshrc
(*rxvt*) # RXVT DERIVATIVES precmd () { print -Pn "\e]0;%T %n@%m %c\a" }
Vous pouvez écrire directement dans la barre de titre d'un Xterm en utilisant la commande printf(1).
printf "\033]0; kikou laulle \007"
Pensez à désactiver le prompt de la barre de titre pour une utilisation hors script; sinon, ce dernier va écrasez vos titres à chaque commande…
Colorier ls
Souvent on veut mettre de la couleur dans ls(1) de FreeBSD, alors on essaie :
$ alias ls='ls --color'
Hélas, ça ne marche pas …
La commande ls
de FreeBSD, n'est pas la commande GNU. On vois bien une solution pointer son nez :
$ alias ls='ls -G'
Comme nous dit le manuel. On peut y lire l'existence de trois variables d'environnement :
CLICOLOR
: cette variable est un booléen qui sert à la même chose que le-G
de notre alias. il active la coloration surls
.CLICOLOR_FORCE
: cette variable est aussi un booléen, mais cette fois-ci, si elle est à enable, cette variable implique la coloration dans tout les cas même en mode non interactif. La coloration fait appel au caractères d'échappements, et donc je vous déconseille ce mode car sinon, dans vos scripts en piping de sortie de ls, vous aurez de drôles de surprises.LSCOLORS
: c'est ici que ça devient intéressant !:)
On peu configurer les couleurs en liste fb
, texte/fond
.
Les couleurs sont :
a
noirb
rougec
vertd
marrone
bleuf
magentag
cyanh
gris clairx
couleur par défaut du shell pour le texte et le fondX
pour le fond va souligner
Utiliser des majuscules pour le texte mettent en gras. On a affaire ici aux couleurs standards ANSI.
L'affichage dépend tout de même des capacités du mode d'affichage dans lequel on est.
Pensez à fixer vos SHELL
à xterm, xterm-color voire xterm-color-256 .
L'ordre de la séquence pour la liste est :
- répertoire
- lien symbolique
- socket
- tube
- exécutable
- bloc spécial
- caractère spécial
- exécutable avec bit setuid
- exécutable avec bit setgid
- répertoire en sticky bit, en écriture pour tout le monde
- répertoire en écriture pour tout le monde, sans sticky bit
On peut donc avoir dans le fichier de configuration de son shell (.bashrc
,.zshrc,.cshrc
, …).
- .bashrc
export CLICOLOR=enable export LSCOLORS=EXfxcxdxbxegedabagacad
ex:
- .cshrc
alias solarized 'setenv LSCOLORS gxfxbEaEBxxEhEhBaDaCaD' alias basiccolor 'setenv LSCOLORS CxGxGgFxBxgefxBHxfdead' setenv MANCOLOR 1 setenv MANWIDTH tty
Autologin
Les terminaux sont décrits dans gettytab(5). Il existe une option pour obtenir une connexion automatique, 'autologin
'.
Par exemple, consultez les entrées 'al.*
'
- /etc/gettytab
autologin|al.9600:\ :al=root:tc=std.9600: al.19200:\ :al=root:tc=std.19200: al.38400:\ :al=root:tc=std.38400: al.57600:\ :al=root:tc=std.57600: al.115200:\ :al=root:tc=std.115200: al.230400:\ :al=root:tc=std.230400: al.Pc:\ :al=root:tc=Pc alme.Pc:\ :al=david:tc=Pc
Notez la dernière que j'ai ajouté pour se connecter automatiquement à 'david
'.
Ensuite choisissez cette option dans une des entrée de ttys(5):
- /etc/ttys
ttyv1 "/usr/libexec/getty alme.Pc" xterm onifexists secure
Enfin, selon le shell que vous avez choisi pour cette utilisateur, complétez le '.bashrc/.cshrc/.zshrc
' avec
- .bashrc
[ "${TTY}" = "/dev/ttyv1" ] && exec faireuntruc
Pour faire un truc automatiquement sur ce tty.