Pagina1 van 1

Hoe pas je de Z-Shell Prompt aan (zsh – macOS, Linux)

Hoe pas je de Z-Shell Prompt aan (zsh – macOS, Linux)
   0

Als je Terminal gebruikt onder een recente versie van macOS, dan gebruik je zeer waarschijnlijk, zonder dit misschien te weten, Z-Shell (zsh) –  een bekende Shell die we ook onder Linux terug kunnen vinden. Dit was ooit eens Bash, maar Apple stapte begin 2019 over op Z-Shell (sommige gebruikers zien het verzoek over te stappen op zsh asl ze Terminal openen, mochten ze dit nog niet hebben gedaan).

Ik rommel best regelmatig in Terminal en eerlijk gezegd bevalt me de standaard prompt me niet.

In dir artikel daarom: hoe pas je Z-Shell prompt aan naar jouw smaak of voorkeur.

Merk op dat deze trucs heel goed zouden kunnen werken met andere Shells en op andere platformen (zoals zsh onder Linux).




Overzicht

Waarom zouden we Z-Shell Prompt aanpassen?

De standaard  Z-Shell prompt is bevat gebruikersnaam, host-naam, en de huidige directory.

Stanraard Z-Shell prompt onder macOS

Stanraard Z-Shell prompt onder macOS

Voor mijn toepassingen is deze informatie niet echt zinvol.
Ik weet al dat ik ben ingelogd als mijzelf (er is maar 1 gebruikersaccount), en ik weet ook de host-naam van mijn Mac (welke ik overigens zelden ergens voor nodig heb).

In plaats daarvan zie ik liever een prompt die duidelijk verschilt van standaard tekst, zodat ik sneller kan vinden waar ik het commando heb uitgevoerd.

 Tip: Er is wel een valide argument natuurlijk voor gebruikersnaam en host-naam in de prompt. Dit is met name zinvol als je meerdere Terminal vensters open hebt staan welke elk op een andere machine draaien of waar je bent ingelogd met een andere gebruikersnaam. Echter, ik gebruik meestal SSH om op een andere machine te werken, en betreffende verbinding heeft zijn eigen prompt definitie die dit al weergeeft.

Tijdelijk vs Permanent aanpassen van de Z-Shell prompt

Voor we in detail gaan, is het goed te weten dat we de prompt tijdelijk of permanent kunnen aanpassen.

Een tijdelijke prompt is handig voor testen en voor specifieke taken.
Echter een permanente prompt is natuurlijk geschikt voor het formaat waar de standaard de voorkeur aan geven.

Om te zien hoe dit werkt, wat basis principes hoe Z-Shell hier mee om gaat.

Tijdelijke de Z-Shell Prompt wijzigen

Het “formaat” van onze Z-Shell prompt staat opgeslagen in de environment variabele PROMPT.

N.B.: zsh gebruikt de environment variabele PS1 voor de prompt definitie. De environment variabele PROMPT, wat we in dit artikel gebruiken, is een synoniem hiervoor. Het kan dus gebeuren dat andere artikelen naar PS1 verwijzen en weer andere artikelen PROMPT hanteren. Omdat ze beide hetzelfde zijn en ik persoonlijk de naam PROMPT meer voor de hand liggend vindt, gebruik ik dus de environment variabele PROMPT – ook nog makkelijker te onthouden ook nog.

We kunnen (tijdelijk) de prompt op deze manier aanpassen (in Terminal natuurlijk):


PROMPT='%T %B%~%b $ '

Type bovenstaande tekst in en druk op Enter. Je ziet het effect meteen.

Echter … wanneer je Terminal afsluit en weer opent, dan zul je zien dat de prompt wee terug staat op de standaard prompt. Jouw definitie is dus weg.
Zoals gezegd: ideaal voor testen natuurlijk – als het goed fout gaat, gewoon Terminal opnieuw starten en er is geen vuiltje aan de lucht.

Permanent de Z-Shell Prompt aanpassen

De Z-Shell, bij het opstarten, kijkt altijd naar het bestand .zshrc in jouw home directory (~) – welke standaard niet bestaat.

N.B.: Omdat de bestandsnaam met een punt begint, is dit bestand een verborgen bestand en dus niet zichtbaar in b.v. Finder.

In dit bestand kunnen we het commando opslaan om bij het opstarten de prompt te veranderen.
De volgende keer dat je dan Terminal opent, zal Z-Shell dit bestand openen en uitvoeren wat hier instaat – dus inclusief het aanpassen van de prompt.

N.B.: Dit bestand kun je bewerken met een platte tekst editor zoals bijvoorbeeld nano (in Terminal), TextEdit (zit standaard bij macOS) of een applicatie zoals BBEdit (mijn favoriete tekst editor – waarvan een gratis versie bestaat, en een commerciële versie).

Terug naar de standaard Z-Shell Prompt

Voor het geval er van alles fout ging, of je wilt terug naar de standaard prompt, om wat voor reden dan ook, dan kun je dat bereiken door gewoon het bestand ~/.zshrc te verwijderen en Terminal opnieuw op te starten.

Waarschuwing! Voor je dit bestand verwijderd, controleer wel even of er misschien meer in staat dan alleen maar jouw prompt instellinge. Mocht dit het geval zijn, dan verwijderen we natuurlijk alleen maar de PROMPT regel.

Definiëren van de Z-Shell prompt

Nu dat we wat van de achtergrond weten kunnen we aan de slag …
Hieronder een lijst met opties die we in de prompt kunnen gebruiken.

Als eerste dus in de gaten houden dat we de PROMPT definitie tussen aanhalingstekens zetten (in dit geval enkelvoudige aanhalingstekens).


PROMPT='%T %B%~%b $ '

Tussen de aanhalingstekens kunnen we speciale codes plaatsen, welke dynamische informatie weergeven of formattering aanpassen zoals kleur, dik, schuin, etc.
Maar we kunnen hier ook gewone tekst inzetten natuurlijk.

N.B.: “%” en “)” worden gezien als speciale karakters, dus als je die als tekst wilt weergeven dan zul je ze moeten “escapen”. Dit doen we door een “%” voor deze tekens te zetten. Dus als je een “%” in de prompt wilt weergeven dan voer je dat in als “%%“. Hetzelfde geldt voor “)” wat dan “%)” wordt.

N.B.: Ik heb de lijst met opties beperkt tot ganbare opties en opties die werken onder macOS – er zijn echter nog veel meer mogelijkheden.
Zie hiervoor de zsh handleiding m.b.t. de PROMPT.

Dynamische Prompt Elementen

Dit zijn elementen in de prompt die kunnen veranderen, op basis van wat er zich afspeelt. Bijvoorbeeld de tijd of de huidige directory.
Z-Shell heeft een aardige selectie.

Dynamische Elementen
Login Informatie
%l Het TTY device waarmee je verbinding hebt gemaakt, met “/dev/” of “/dev/tty” verwijderd Merk op: Kleine letter “L”
%M Volledige hostnaam
%m Hostnaam tot de eerste punt Een nummer na ‘%m’ geeft aan hoeveel elementen van de naam zichtbaar moeten zijn
%n Grbuikersnaam De gebruiker die nu is ingelogd
%y Zelfde als “%l” maar dan zonder verwijderen van “/dev” of “/dev/tty”
Shell State Informatie
%? Geeft de return code van het laatste commando weer Bij succes is dat over het algemeen “0”
%d
Huidige directory
(alternatief: %/ )
Een nummer na “%” geeft aan hoe diep het pad wat weergegeven wordt mag zijn (van achteren naar voren). Een negatief nummer begint van vooraf aan (pad)
%~ Huidige directory, gebruik “~” voor de home directory Hetzelfde als %d, echter zal de home directory als “~” worden weergegeven
%h History event regel nummer (alternatief: %! )
%C Huidige Directory Zie ook %d en %~. Alternatieven zijn %c en %.
Date and Time Informatie
%D Huidige datum in JJ-MM-DD formaat
%T Huidige tijd in 24-uur formaat (UU:MM)
%t Huidige tijd in 12-hour formaat (UU:MM) met AM/PM Alternatief: %@
%* Huidige tijd in 24-uur formaat met seconden
%w Huidige datum in dag-DD formaat
%W Huidige datum in MM/DD/JJ formaat
%D{string} Huidige datum en tijd gebaseerd op de formaat string {string} Zie strftime formaat opties.
Voorbeeld: PROMPT=’%D{%a}’
Meest gebruikt:

%a = Dag van de week afkorting
%A = Volledige dag van de week
%w = dag van de week (0-6)

%d = dag van de maand (01-31)

%b = Maand naam afgekort
%B = Volledige maand naam
%m = Maand (00-12)

%y = Jaar (00-99)
%Y = Jaar (4 cijfers)

%H = Uur (00-23)
%k = Uur (0-23)
%I = Uur (01-12)
%l = Uur (1-12)

%M = Minuten (00-59)

%S = Seconden (00-59)

%p = AM of PM
%P = am of pm

Visuele Elementen

Visuele elementen worden gebruikt om het tekst formaat aan te passen, zoals kleuren, dik gedrukt, schuin, etc.

For example this make the text red:


PROMPT='%K{red}Test%k>'
Visual Elements
Start Stop Effect
%B %b Dik gedrukt
%U %u Onderstreeps
%S %s Gemarkeerd
%F{kleur} %f Verander voorgrond kleur (tekst)
%K{kleur} %k Verander achtergrond kleur

Kleur: Z-Shell kent standaard deze kleur namen: blackredgreenyellowbluemagentacyan and white.
Het kan echter prima 256 kleuren (0-255) aan – Zie ook het kleuren schema hieronder of zie ook het uitgebreide XTerm Kleuren artikel.

Tekst rechts uitlijnen

Een van de visuele opties die ik miste was de optie om tekst uit te lijnen, of beter gezegd: de optie om tekst helemaal rechts te zetten.

De reden waarom ik die niet kon vinden is omdat dit niet gedefinieerd wordt in PROMPT, maar in de environment variabele RPROMPT.

Om een voorbeeld uit te proberen; hier een voorbeeld hoe je een klok helemaal rechts kunt zetten (ook dit kun je toevoegen aan het bestand .zshrc, in jouw home directory (~)):


RPROMPT='%t'

Kleuren Tabel

Hier een klein tabelletje met de 16 basis kleuren. Je hebt er waarschijnlijk niet meer nodig, maar in het artikel XTerm Kleuren Lijsten kun je nog meer kleuren vinden.

XTerm 16 Kleuren Set
000
#000000
001
#800000
002
#008000
003
#808000
004
#000080
005
#800080
006
#008080
007
#c0c0c0
008
#808080
009
#ff0000
010
#00ff00
011
#ffff00
012
#0000ff
013
#ff00ff
014
#00ffff
015
#ffffff

 

Voorbeelden

Dus als we een prompt definieren, vergeet dan dus niet dat we 1 of meer codes, en mogelijke tekst, combineren.

Door de onderstaande voorbeelden krijg je misschien een beter idee wat ik hiermee bedoel.

Vergeet niet dat bij deze voorbeelden de prompt dus maar tijdelijk wordt veranderd. Als er iets maf gebeurt dus geen paniek: Gewoon Terminal sluiten en opnieuw opstarten.

Als je uiteindelijk een PROMPT en/of RPROMPT hebt gedefinieert die je bevalt dan kun je ze toevoegen aan het .zshrc bestand.

Huidige Tijd en Directory (kort)(


PROMPT='%T %1d >'

Alternatief:


PROMPT='%T %C >'
Z-Shell voorbeeld - Huidige tijd en directory

Z-Shell voorbeeld – Huidige tijd en directory

We kunnen ook de directory laten weergeven als een tilde ( ~ ) door deze code te gebruiken:


PROMPT='%T %1~ >'
Z-Shell example - Current time and directory (home dir as tilde)

Z-Shell example – Current time and directory (home dir as tilde)

 Huidige Directory links, en klok rechts


PROMPT='%1~ >'
RPROMPT='%F{015}%T%f'
Z-Shell voorbeeld - Huidige tijd rechts, en de huidige directory links

Z-Shell voorbeeld – Huidige tijd rechts, en de huidige directory links

N.B.: in plaats van het nummer “015” (wit in de kleuren tabel), kun je ook het woord “white” gebruiken. Echter onder macOS levert dit meer een grijstint i.p.v. wit.

Tijd en Huidige Directory met meerdere kleuren


PROMPT='%B%1~%b %F{011}>%f'
RPROMPT='%F{015}%T%f'

Uiteraard kun je spelen met de kleuren naar wens.
Persoonlijk zie ik graag de prompt flink afwijken van de normale tekst. Vooral bij lange tekst output kun je dan makkelijker het begin terug vinden.

Z-Shell voorbeeld - Met meer kleuren

Z-Shell voorbeeld – Met meer kleuren

Bonus Tips

Twee tips die de Z-Shell nog een klein beetje kan veranderen …

Verander de Cursor in Z-Shell

Hier wat voorbeelden hoe men de cursor in Z-Shell kan aanpassen. Denk daarbij aan de vorm (blok, lijn) en of het wel of niet knippert.


1
2
3
4
5
6
7
8
9
10
11
# Cursor is een Blok:
echo -e -n "\x1b[\x30 q" # Knipperen
echo -e -n "\x1b[\x32 q" # Niet knipperen

# Cursor is een liggend streepje
echo -e -n "\x1b[\x33 q" # Knipperen
echo -e -n "\x1b[\x34 q" # Niet knipperen

# Cursor is een verticaal streepje
echo -e -n "\x1b[\x35 q" # Knipperen
echo -e -n "\x1b[\x36 q" # Niet knipperen

Dus om een kipperend blok als cursor te krijgen, kopieer het onderstaande commando, plak het in Termianl en druk op Enter.


echo -e -n "\x1b[\x30 q" # Blinking

Dit mag ook zonder het commentaar aan het einde (het wordt toch genegeerd):


echo -e -n "\x1b[\x30 q"

Om dit permanent te maken, kun je ook dit aan het .zshrc bestand toevoegen.

Jouw .zshrc bestand zou er dan bijvoorbeeld zo uit kunnen zien:


echo -e -n "\x1b[\x30 q"
PROMPT='%B%1~%b %F{009}$%f '
RPROMPT='%F{015}%T%f'

Dit maakt de cursor een blok die knippert, geeft de huidige directory links weer, en de klok rechts.

Onderdrukken van het Welkom Bericht

Als je Terminal opent, dan krijg je een welkom/status bericht, zoiets als dit:


Last login: Mon May 10 17:41:21 on ttys000
You have new mail.
hans@MAC_PRO_1 ~ %

Deze melding is vaak niet erg zinvol, en je kunt het eventueel uitzetten door een bestand aan te maken met de naam .hushlogin in jouw home directory (~).
Dit gaat het eenvoudigste met onderstaand commando (maakt een leeg bestand aan – zie ook Hoe maak je lege dummy bestanden aan):


touch ~/.hushlogin

De volgende keer dat je Terminal opent, zul je de melding niet meer zien.
Om dit ongedaan te maken verwijder je het bestand .hushlogin gewoon weer.

Tip: De handleiding van zsh laat nog meer (en complexere) zsh trucs zien (man zsh).

Ondersteun ons ...


Jouw ondersteuning wordt zeer gewaardeerd, en hoeft zelfs niets te kosten. Bijvoorbeeld door links naar ons te delen op social media, of andere websites.

Andere vormen kunnen ook gratis zijn (b.v. shoppen op Amazon).
Alle opbrengsten worden gebruikt voor web-hosting kosten, project hardware en software, koffie, etc.

Hartelijk dank voor wie al heeft bijgedragen!
Het is altijd geweldig om te zien hoe men mijn artikeltjes en applicaties weet te waarderen.

Merk op dat het klikken op affiliate links een kleine commissie voor ons kunnen genereren - dit wordt zeer gewaardeerd.

Reacties


Er zijn nog geen reacties geplaatst.
Je kunt jouw eigen opmerkingen plaatsen m.b.v. dit formulier, of een reactie op een bestaande opmerking plaatsen door op de "Beantwoorden" knop te klikken.



Jouw Opmerking ...

Plaats hier geen lange bestanden (zoals source codes, log files of config files). Gebruik hiervoor het Forum.

Delen:
*
*
Laat me per email weten als er nieuwe reacties zijn.
       Je kunt jouw RSS reader gebruiken om reacties te volgen.


Tweaking4All gebruikt de gratis Gravatar dienst voor Avatar weergave.
Tweaking4All zal nooit jouw email adres met anderen delen.