====== 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 «».
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
«» 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 soit ''root'' ou un utilisateur, selon ''promptchars''.
* 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 variable ''ellipsis'' 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:
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
* ''^'', signifie ''Control''
* ''^['', signifie ''Control['', soit ''ESC'', 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:
(*rxvt*) # RXVT DERIVATIVES
precmd () { print -Pn "\e]0;%T %n@%m %c\a" }
La liste des caractères de contrôle de //Xterm// est documentée dans le fichier [[https://github.com/hamishcoleman/xterm/blob/master/ctlseqs.txt|ctlseqs.txt]] des sources de //Xterm//.
Use the source Luke !
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 sur ''ls''.
* ''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'' noir
* ''b'' rouge
* ''c'' vert
* ''d'' marron
* ''e'' bleu
* ''f'' magenta
* ''g'' cyan
* ''h'' gris clair
* ''x'' couleur par défaut du shell pour le texte et le fond
* ''X'' 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'', …).
export CLICOLOR=enable
export LSCOLORS=EXfxcxdxbxegedabagacad
ex:
alias solarized 'setenv LSCOLORS gxfxbEaEBxxEhEhBaDaCaD'
alias basiccolor 'setenv LSCOLORS CxGxGgFxBxgefxBHxfdead'
setenv MANCOLOR 1
setenv MANWIDTH tty
{{:base:shell:test.png?400|}}
===== 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.*'''
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):
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
[ "${TTY}" = "/dev/ttyv1" ] && exec faireuntruc
Pour faire un truc automatiquement sur ce tty.