Hoofdstuk 7
Opdrachten, configuratie en fouten
Herken je shell en vind hulp
Twee terminalvensters kunnen er hetzelfde uitzien terwijl in elk een andere shell je opdrachten leest. Dat doet ertoe zodra je shellspecifiek advies volgt: een opdracht, optie of hulppagina die in de ene werkt, bestaat in de andere misschien helemaal niet.
Zoek dus uit wat er werkelijk draait voordat je aanneemt dat iemands typadvies bij jou past. De terminal naast deze les volgt je accountvoorkeur: Windows opent PowerShell Core, macOS en Linux openen Bash. Je kunt je eigen terminal op dezelfde manier onderzoeken, ook als die standaard iets anders start.
Lees de sessie, niet de instelling
Vraag de shell om de naam te tonen waarmee die is gestart. In de gehoste les is dat Bash; op je eigen Mac kan het zsh zijn:
echo $0
In een interactieve terminal bevat $0 de naam van de huidige shell. Je ziet bash, zsh of iets vergelijkbaars. Een resultaat zoals -zsh betekent nog steeds zsh. Het streepje vooraan geeft alleen aan dat het een login-shell is.
Vraag de shell om de naam te tonen waarmee die is gestart. In de gehoste les is dat Bash:
echo $0
In een interactieve terminal bevat $0 de naam van de huidige shell. Je ziet bash, zsh of iets vergelijkbaars. Een resultaat zoals -bash betekent nog steeds Bash. Het streepje vooraan geeft alleen aan dat het een login-shell is.
Vraag PowerShell om zichzelf te beschrijven:
$PSVersionTable.PSVersion
Krijg je een versienummer terug, dan bevestigt dat dat PowerShell je opdrachten interpreteert. De gehoste terminal gebruikt PowerShell Core. Geeft dezelfde tekst op je eigen Windows-computer een fout, dan zit je waarschijnlijk in Opdrachtprompt (Command Prompt). Die fout is nuttig bewijs, geen probleem.
Je zult ook het advies zien om op macOS of Linux $SHELL te controleren. Wees daar voorzichtig mee. $SHELL noemt de standaard login-shell van je account, en dat is een andere vraag. Start je Bash vanuit zsh, dan blijft $SHELL zsh melden terwijl Bash alles leest wat je typt.
Vraag het de huidige shell als het onderscheid ertoe doet. Het promptsymbool is een nog zwakkere aanwijzing: $, % en > zijn allemaal instelbaar, en mensen stellen ze ook in.
Vraag het de shell die je hebt
Elke shell heeft een lokale route naar hulp: man en opdrachtspecifieke hulp op macOS en Linux, en Get-Help in PowerShell. Zodra je weet in welke shell je zit, gebruik je de bijbehorende route:
| Huidige shell | Een nuttige route naar hulp |
|---|---|
| Bash | help cd voor een ingebouwde Bash-opdracht |
| zsh | man zshbuiltins, zoek daarna naar cd |
| PowerShell | Get-Help Set-Location |
Deze beantwoorden een veel gerichtere vraag dan een zoekopdracht op het web en kunnen je geen syntaxis van een andere shell geven. Veel frustratie bij beginners op de opdrachtregel ontstaat doordat ze een correct antwoord op de verkeerde shell toepassen.
Verander je standaardshell niet voor deze les. Dat beïnvloedt elke toekomstige sessie en is hier nergens voor nodig.
Oefening: vaststellen en bevestigen
Gebruik de terminal naast deze les, laat die zoals die is en start er geen andere shell in.
Stel met de methode voor jouw systeem vast welke shell werkelijk draait.
Open de hulppagina voor de opdracht waarmee je in die shell van map wisselt.
Schrijf twee dingen op: de naam van de shell en de eerste regel of titel van de hulppagina die je kreeg.
Die twee feiten zijn de hele oefening. Als iemand je een opdracht geeft die niet werkt, is precies kunnen zeggen in welke shell je zit vaak genoeg om het meteen op te lossen.
De waarde van $SHELL bij een cursist is /bin/zsh, maar echo $0 toont bash. Welke shell leest op dit moment de opdrachten in deze terminal?
Je plakt een opdracht uit een handleiding en de shell meldt een syntaxisfout bij een onverwacht token, terwijl dezelfde opdracht prima werkt bij degene die je die stuurde. Wat kun je het beste eerst controleren?
Je hebt het eerste feit voor probleemoplossing: welke shell je opdrachten interpreteert. De volgende vraag is wat die doet met het eerste woord dat je typt.