Niet-afdrukbare escape sequences kunnen worden gebruikt om interessante effecten in prompts te produceren. Om deze escape sequences te gebruiken moet je ze omsluiten door \[ en \] (zoals besproken in Niet Afdrukbare Tekens in Prompts), waarbij je Bash vertelt dit materiaal te negeren als het de grootte van de prompt aan het berekenen is. Als je deze scheidingstekens niet insluit, resulteert dat in code waarbij de cursor onjuist wordt geplaatst, omdat het de werkelijke grootte van de prompt niet kent. Escape sequences moeten ook worden voorafgegaan door \033[ in Bash van voor versie 2, of door \033[ of \e[ in latere versies.
Als je probeert de titelbalk van je Xterm met je prompt te wijzigen onder de console, zul je rommel in je prompt produceren. Test de TERM omgevingsvariabele om aan te laten geven of je prompt in een Xterm is, om dit te voorkomen.
function proml { case $TERM in xterm*) local TITLEBAR='\[\033]0;\u@\h:\w\007\]' ;; *) local TITLEBAR='' ;; esac PS1="${TITLEBAR}\ [\$(date +%H%M)]\ [\u@\h:\w]\ \$ " PS2='> ' PS4='+ ' }
Dit is een functie die in ~/.bashrc kan worden opgenomen. De functienaam
zou dan moeten worden aangeroepen om de functie uit te voeren.
De functie wordt net als de PS1-string in de omgeving opgeslagen.
Zodra de PS1-string door de functie is ingesteld, kun je de functie
uit de omgeving verwijderen met
unset proml
. Aangezien de prompt niet verplaatst kan worden
vanuit de console naar een Xterm, wordt de TERM-variabele niet iedere keer
getest als de prompt wordt gegenereerd.
Ik gebruikte vervolgmarkeringen (backslashes) in de
definitie van de prompt, waardoor het mogelijk wordt het op meerdere regels
te continueren. Dit verbetert de leesbaarheid, waardoor het
eenvoudiger is wijzigingen aan te maken en fouten op te sporen.
Ik definieer dit als een functie omdat het Bashprompt package zo met prompts omgaat ( Het Bash Prompt Package wordt later in dit document besproken). Het is niet de enige manier om 't te doen, maar het werkt goed. Naarmate de door jouw gebruikte prompts steeds complexer worden, wordt het steeds lastiger ze achter de prompt in te typen en zal het praktischer zijn ze in één of ander tekstbestand aan te maken. Bewaar in dit geval het hierbovengenoemde als een tekstbestand genaamd "proml" om dit achter de prompt te testen.
Je kunt er als volgt mee werken:
[giles@nikola:/bin (4.498 Mb)]$ cd -> Ga naar waar je de prompt op
wilt slaan
[giles@nikola:~ (0 Mb)]$ vi proml -> Wijzig het promptbestand
... -> Voer de gegeven tekst van
hierboven in
[giles@nikola:~ (0 Mb)]$ source proml -> Lees de promptfunctie in
[giles@nikola:~ (0 Mb)]$ proml -> Voer de promptfunctie uit
De eerste stap in het aanmaken van deze prompt is het testen of de te starten shell een xterm is of niet. Als dit niet zo is, wordt de shell-variabele (${TITLEBAR}) gedefinieerd. Het bestaat uit de juiste escape sequences en \u@\h:\w, waarmee de <user>@<machine>:<werkdirectory> in de Xterm titelbalk worden geplaatst. Dit is vooral nuttig met geminimaliseerde Xterms, omdat ze daardoor sneller identificeerbaar zijn. Het andere materiaal in deze prompt zou bekend moeten zijn van de vorige prompts die we hebben aangemaakt.
De enige keerzijde aan het manipuleren van de titelbalk van een Xterm zoals deze, komt voor wanneer je op een systeem inlogt waarop je de titelbalk hack niet hebt ingesteld. De Xterm zal de informatie continu laten zien van het vorige systeem dat de titelbalk hack had.