Heb je stilgestaan bij het openen van de terminal wat je nu opent? Wat we kunnen stellen is dat Bash de standaard is in de wereld van Linux en voldoet aan wat je zou verwacht van een shell. Alleen de wereld van Linux zou de wereld van Linux niet zijn als je geen keuze zou hebben om een andere shell te kiezen. Tcsh is een van de shells waaruit je kunt kiezen en waar wat dieper op in gegaan wordt. (Paul Reemeijer)

Een Unix-shell is zowel een opdrachtinterpreter als een programmeertaal. Een shell maakt uitvoering van GNU-commando’s mogelijk of deze te combineren in de programmeertaal waardoor je taken automatiseert. Het uitvoeren van commando’s is essentieel maar de kracht van shells is de ingebedde programmeertaal.

Dit laatste is van belang om te onthouden bij het in gebruik nemen van een nieuwe shell. Bedenk dat specifieke shells en de daarbij behorende programmeertaal mogelijk incompatibel is met andere systemen.

Er zijn nogal wat shells beschikbaar voor Linux distributies. De bekendere, naast bash, zijn bijvoorbeeld ksh, zsh, ash en waar we het verder over gaan hebben binnen dit artikel: tcsh.

Op de volgende wikipagina is een overzicht te vinden van de shells die beschikbaar zijn met een aantal vergelijkingen op onderwerpen zoals of er gebruik gemaakt kan worden van opstart scripts en waar deze worden verwacht.

https://en.wikipedia.org/wiki/Comparison_of_command_shells

Csh heeft een lange geschiedenis met het doel om meer te lijken op de programmeertaal C waarin het unix-systeem bijna uitsluitend in is geschreven. Tcsh is een verbeterde versie van csh waar de “t” komt van de “T” van het besturingsysteem TENEX.

Installeren TCSH

De meeste Linux distributies hebben tcsh in hun eigen, standaard repositories staan en hierdoor is het eenvoudig om tcsh op je machine te plaatsen.

Voor Debian / Ubuntu installeer je tcsh door

> sudo apt install csh

Voor Fedora gebruik je het volgende commando

> sudo dnf install tcsh

en voor (open)SUSE gebruik je het commando

> sudo zypper in tcsh

 

Om gebruik te maken van tcsh is het niet noodzakelijk om Bash direct te vervangen maar start je de omgeving, na het openen van je standaard terminal shell door het commando

> tcsh.

Je prompt verandert en je bent klaar om gebruik te maken van, in dit geval, tcsh.

 

Ben je gewend aan tcsh en heb je besloten om altijd standaard deze, of naar aanleiding van eigen onderzoek naar de verschillende shells, dit je standaard te laten zijn bij het inloggen op TTY of bij het openen van je terminal applicatie?

Dan is het volgende stappenplan bruikbaar en laat ik het zien aan de hand van tcsh als standaard in te stellen. Eerst zoek je naar waar tcsh is geïnstalleerd door het commando “which” of “whereis”.

>which tcsh

Dan krijg je het volgende terug: ‘/usr/bin/tcsh’

Met het whereis commando krijg je meer informatie terug. Je krijgt dan te zien waar de binary zich bevindt, de source van tcsh en de manpage bestanden.

> whereis tcsh

> tcsh: /usr/bin/tcsh /bin/tcsh /usr/share/tcsh /usr/share/man/man1/tcsh.1.gz

 

De volgende stap is om de standaard shell te wijzigen met het commando “chsh”.

paul@linux:~> chsh

Password:

Changing the login shell for paul

Enter the new value, or press ENTER for the default

Login Shell [/bin/bash]:

 

Opvolger van csh

Zoals je eerder hebt gelezen is tcsh een verbetering op csh. Command-completion van TENEX is daarbij de start geweest voor tcsh. Maar dit is niet het enige waar de toevoeging zit in tcsh ten opzichte van csh. Wat er nog meer aan toegevoegd is zijn de volgende onderdelen:

* Commandoregel-editor

* Voltooiing en vermelding

* Spellingcorrectie

* Editor-opdrachten

Door het artikel heen gaan we een aantal van deze toevoegingen bespreken waarbij ik de spellingcorrectie van een commando erg ben gaan waarderen.

Het eerste wat me opvalt, na het starten van tcsh, is het standaard gedrag van de prompt. De prompt ziet er in vergelijking met een standaard Bash prompt anders uit en laat niet het volledige pad zien waar ik mij bevind in het bestandssysteem.

Pwd werkt en door te navigeren naar een andere directory behulp van het commando “cd” vertelt de shell mij direct waar ik mij bevind.

Hoe pas je dit aan?

Configuratie

Net als voor BASH zijn er configuratiebestanden waarin je persoonlijke en globale aanpassingen doet voor je gekozen shell. Door middel van het voorbeeld hierboven over de prompt raken we stapsgewijs de verschillende, niet alle, configuratie bestanden aan die worden gebruikt voor tcsh.

Op mijn machine zijn wel de globale configuraties beschikbaar maar de persoonlijke configuratiebestanden niet. Ik vermoed dat dit komt door dat ik pas na de installatie en aanmaken van mijn account tsch heb geïnstalleerd. Bij de controle van de op mijn aanwezige machine etc/skel directory staan ook hier de bestanden niet die nodig zijn voor een persoonlijke tcsh configuratie. Dit is niet erg maar hou er rekening mee dat de mogelijkheid bestaat dat je nieuwe bestanden moet aanmaken voor je persoonlijke configuratie.

Zoals je waarschijnlijk wel weet staan je persoonlijke gebruikersaccount configuraties in de “dotbestanden” onder je home map. De twee bestanden die hier specifiek over gaan zijn .cshrc en .login.

Bij het wijzigen van je persoonlijke configuratie in de bestanden .cshrc en .login is het fijner om niet bij iedere wijziging de terminal af te sluiten en opnieuw te starten bij een wijziging. Om niet keer op keer opnieuw te hoeven inloggen op een interactieve shell is het commando “source” te gaan gebruiken. Als je twijfelt dat de wijziging wordt doorgevoerd of je hebt een wijziging gedaan die niet opgepakt lijkt te worden, zit er niets anders op dan een nieuwe terminal te open. Het gebruik van source is als volgt en pas je alleen toe op het configuratiebestand dat je hebt gewijzigd.

> source .cshrc of

> source .login

 

Het volledige pad tonen op de prompt. Open .cshrc in je favoriete editor en zet het volgende in het de configuratie bestand onder je home map (cd ~)

 

    if ($?prompt) then

        set prompt = "%/> "

    endif

 

Het if -statement test of de promptvariabele een waarde heeft, om onderscheid te maken tussen interactieve en niet-interactieve shells.

 

We hebben de lokale, persoonlijke configuratie bestanden kort aangehaald. Dezelfde vorm bestaat tevens globaal. De globale bestanden csh.cshrc en csh.login staan in de etc directory.

Om de standaard niet zomaar te overschrijven en dat je je globale wijzigingen niet kwijt raakt bij een update van het pakket beginnen beide bestanden met een waarschuwing hierover en is bijvoorbeeld in csh.login het volgende opgenomen:

# Local configuration

if ( -r /etc/csh.login.local ) source /etc/csh.login.local

zodat je persoonlijke globale wijzigingen hierin geplaatst worden.

 

Waar ik verder niet op in zal gaan zijn de optionele bestanden .logout in je persoonlijke home map of het bestand $HOME/.csh.expert om veel meer in eigen hand te hebben in plaats van afhankelijk te zijn van globale opgelegde instellingen voor tcsh.

Wat is er anders?

De interactieve shell voelt zeker niet onwennig of geheel nieuw. De standaard tools werken. Het gebruik van de tools ps, vim of het navigeren met het command cd voelt waarschijnlijk niet anders voor je.

 

Wat wel opvalt is het verkeerd typen van het commando. Er is een heuse spellingcorrectie actief. Gewoon een ‘Bedoel je niet…’  van een zoekmachine. Probeer het zelf eens door het volgende te typen

> ci .login

Je krijgt dan de volgende vraag te zien: CORRECT> vi .login (y|n|e|a)?

De bedoeling is hier inderdaad om vi (of vim) te openen en door y te geven wordt netjes mijn editor met het opgegeven bestand getoond.

Het beantwoorden van CORRECT kan met y en n. Deze spreken voor zich Yes (Ja) of No (Nee). De ‘e’ laat het commando staan wat je hebt opgegeven en deze wordt uitgevoerd. De ‘a’ staat voor abort en stopt alles net alsof je een ^C uitvoert.

Scripting

Het schrijven en een script in tcsh is niet veel moeilijker dan in bash. Het is alleen net anders. Het is onmogelijk om alles in dit artikel te bespreken maar haal een aantal kleine voorbeelden aan om naar te kijken. Het eerste wat ik hierover meldt is dat het set commando wordt gebruikt om variabelen te zetten en een dollar teken als je er naar verwijst.

Voor het schrijven van scripts met tcsh die je (uiteindelijk) zou willen verspreiden is het van belang om goed te begrijpen dat niet iedereen tcsh geïnstalleerd heeft staan waardoor het mogelijk niet uitvoerbaar is voor de ander.

Als eerste de welbekende array maak je op de volgende manier:

> set mijnarray = ( Welkom bij het Linux Magazine )

Om een onderdeel van deze array te printen voer je het volgende uit:

> echo $mijnarray[4]

Je ziet nu het woord Linux op je scherm.

Het maken van een simpele berekening:

> set num1 = 40

> set num2 = 87

> @ tot = ( $num1 + $num2 )

> echo $tot

De uitvoer die je hoort te zien is 127.

Belangrijk bij het @ teken is dat er een spatie staat voordat je tot typt. Je krijgt anders een foutmelding “Badly placed ()’s.”.

Bij het in gebruik nemen van tcsh ga je tegen onverklaarbare foutmeldingen lopen door op een verkeerde moment wel of niet de spatie op de juiste manier te hebben toegepast. In mijn zoektocht hiernaar kwam ik deze klacht veelvuldig tegen met de daarbij onvolledige of niet duidelijke foutmelding die je op je scherm verschijnt.

Zoals bijna bij iedere andere taal aanwezig is heeft tcsh de volgende gestructureerde opdrachten:

* if-then-else

* foreach

* while

* switch

Wat ik als laatste wil laten zien is het uitvoeren van tests die betrekking hebben op bestanden en mappen. Is er een specifieke map en of bestand aanwezig en hang hier consequenties aan. Denk bijvoorbeeld aan een op maat gemaakte foutmelding.

 

#!/bin/tcsh

if (-d $HOME) then

  echo "Je HOME directory bestaat.”

endif

if (-f $HOME/test) then

  echo "Het test bestand bestaat."

else

  echo "Het test bestand bestaat niet."

endif

 

Voer het uit door dit voorbeeld op te slaan en het bestand execute of wel uitvoerrechten toe te kennen. Uitvoer rechten toebedelen aan het bestand doe je als volgt voor de gebruikersaccount:

>chmod u+x [bestandsnaam]

en voer je het uit met het commando:

> ./[bestandsnaam]

 

Slot woord

Ik ga geen conclusie schrijven over of je tcsh wel of niet moet gaan gebruiken. Het is goed dat er voldoende hoeveelheid keuze is in de wereld van shells. Je merkt, in de zoektocht naar informatie, dat bash veelvuldig gebruikt wordt en er veel, heel veel informatie te vinden over deze shell en programmeertaal. Met het artikel hoop ik dat je interesse is gewerkt om te kijken naar tcsh of een andere shell die beschikbaar is binnen je gekozen distributie.

 

Externe link

* https://www.tcsh.org/

* https://github.com/tcsh-org/tcsh

* https://bugs.astron.com/my_view_page.php