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.

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 = \$\#

Oui, on peut ajouter une information à droite, de la même manière:

set rprompt="%d %D  %w %Y"

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.

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
  • ^, 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:

.zshrc
(*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 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…

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 :

  1. répertoire
  2. lien symbolique
  3. socket
  4. tube
  5. exécutable
  6. bloc spécial
  7. caractère spécial
  8. exécutable avec bit setuid
  9. exécutable avec bit setgid
  10. répertoire en sticky bit, en écriture pour tout le monde
  11. 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

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.

  • base/shell/prompt.txt
  • Dernière modification : 2023/08/17 22:19
  • de david