Wat is csh en hoe gebruik je deze shell?

Auteur: Gepubliceerd

Kort samengevat: csh, oftewel C shell, is een systeemshell: een programma dat ingevoerde opdrachten interpreteert en andere programma’s start op Unix en verwante systemen. Je kunt er interactief mee werken en scripts mee uitvoeren. De syntaxis lijkt deels op de programmeertaal C. Je kunt csh tegenkomen in oudere omgevingen, technische tools en bestaande scripts; voor een nieuw beheerscript is Bash of sh meestal praktischer.

Waarvoor dient csh en wat is het verschil met een terminal?

Een terminal is een tekstinterface waarin je opdrachten invoert en resultaten leest. De shell werkt binnen die omgeving: hij leest opdrachten, werkt verkorte notaties uit, verwerkt omleidingen en start programma’s. Een terminalvenster openen betekent dus niet dat je csh gebruikt — daarin kan ook Bash, Zsh of een andere shell draaien.

C shell is ontwikkeld aan de Universiteit van Californië in Berkeley, met Bill Joy als belangrijkste ontwikkelaar. De naam verwijst naar de gelijkenis van sommige besturingsconstructies met de programmeertaal C, niet naar de mogelijkheid om C-code uit te voeren. Je kunt een C-bronbestand niet via csh uitvoeren alsof het een gewoon script is.

Met csh kun je tussen mappen navigeren, tools starten, ze via pipes met elkaar verbinden en resultaten naar bestanden sturen. De shell ondersteunt ook een opdrachtgeschiedenis, aliassen — zelf ingestelde afkortingen voor opdrachten — en het beheren van taken die op de achtergrond draaien.

Veel eenvoudige opdrachten zien er in verschillende shells hetzelfde uit. Zo start ls een programma dat de inhoud van een map toont. De verschillen worden belangrijk bij variabelen, voorwaarden, lussen en het omleiden van foutmeldingen.

Hoe ziet de syntaxis van csh eruit?

In csh stel je een gewone variabele in met set en een omgevingsvariabele met setenv. Een omgevingsvariabele wordt doorgegeven aan programma’s die je start en kan zo hun gedrag beïnvloeden.

set naam = "Anna"
echo "Hallo, $naam"

setenv APP_MODE test

De eerste variabele wordt hier gebruikt om een bericht op te bouwen. De tweede stelt de waarde APP_MODE=test beschikbaar aan de programma’s die je start; het effect daarvan hangt af van de vraag of het programma die variabele uitleest.

Een voorbeeld van een lus in csh:

foreach kleur (rood groen blauw)
    echo "Kleur: $kleur"
end

Deze lus toont drie regels. In Bash werkt hij niet zonder aanpassingen, omdat Bash een andere lusconstructie gebruikt. Ook een opdracht uit een Bash-handleiding, zoals export APP_MODE=test, is niet de juiste manier om in csh een omgevingsvariabele in te stellen.

Neem geen complete scriptfragmenten over van de ene shell naar de andere zonder de syntaxis te controleren. Dat een losse opdracht zoals echo in beide werkt, betekent niet dat het hele script compatibel is.

Hoe controleer je of csh op je systeem staat?

Op een Unix-achtig systeem kun je controleren of het programma te vinden is via het huidige zoekpad voor opdrachten:

which csh

Krijg je een pad terug, bijvoorbeeld /bin/csh, dan kan het systeem de opdracht onder die naam vinden. Geen resultaat betekent niet altijd dat het programma niet is geïnstalleerd: het kan buiten de mappen staan die de shell doorzoekt. Ook de beschikbaarheid van which en de vorm van de melding hangen af van het systeem.

De opdracht echo $SHELL toont meestal het pad naar de login-shell, de standaardshell die aan de gebruiker is toegewezen. Dit is geen betrouwbare controle van de shell die op dat moment draait, omdat de waarde van deze variabele ongewijzigd kan blijven als je handmatig een andere shell start.

Als csh beschikbaar is, start je met csh een extra shellsessie. Met exit keer je terug naar de vorige. Dat is een eenvoudigere manier om csh uit te proberen dan de standaardshell van je account te wijzigen. Raadpleeg voor de installatie bij voorkeur de documentatie van je specifieke systeem.

csh, tcsh, Bash en sh — welke kies je?

tcsh is een doorontwikkeling van csh, is er grotendeels mee compatibel en biedt uitgebreide functies voor interactief gebruik, waaronder het bewerken van de opdrachtregel en het aanvullen van namen. Op sommige systemen start de opdracht csh in werkelijkheid tcsh. Bij het onderzoeken van problemen is daarom de daadwerkelijke implementatie van belang, niet alleen de naam van de opdracht.

ShellWanneer geschikt
cshVoor het onderhouden van scripts en omgevingen die de syntaxis van C shell vereisen.
tcshVoor interactief werken in een omgeving die op de csh-familie is gebaseerd.
BashVoor nieuwe scripts als Bash beschikbaar is op de machines waarop ze moeten draaien.
shVoor overdraagbare scripts met syntaxis die voldoet aan de POSIX-standaard.

POSIX is een familie van standaarden die gemeenschappelijke interfaces van Unix-achtige systemen beschrijven, waaronder het gedrag van de shell. csh is niet compatibel met de syntaxis van de POSIX-shell. Het advies om voor nieuwe scripts Bash of sh te gebruiken, komt vooral voort uit de overdraagbaarheid en het gemak waarmee je gangbare tools en voorbeelden voor systeembeheer kunt gebruiken, niet uit een onvermogen van csh om taken te automatiseren.

Hoe voer je een bestand voor csh uit?

Een bestand met de extensie .csh bevat meestal een C shell-script, maar de extensie alleen zegt niet wat erin staat. De eerste regel kan een aanwijzing geven, bijvoorbeeld #!/bin/csh. Dit is een shebang: een regel die aangeeft welke interpreter wordt gebruikt wanneer je een uitvoerbaar bestand rechtstreeks start.

Nadat je de inhoud van een vertrouwd bestand hebt bekeken, kun je het expliciet met csh uitvoeren:

csh skrypt.csh

Hiervoor hoeft het bestand geen uitvoerrechten te hebben, maar wel leesrechten. Het script draait met de rechten van de gebruiker die het start. Test een onbekend bestand daarom niet via sudo.

Als de instructies van een project csh vereisen, controleer dan eerst of csh beschikbaar is en wat de projectvereisten zijn. Vervang csh niet automatisch door bash skrypt.csh — een andere interpreter kiezen vertaalt de syntaxis van het script niet.

Zie ook: Wat gebeurt er als een domeinnaam verloopt?

Lees ook

Lees hoe PHP-FPM PHP-verzoeken verwerkt, verschilt van een webserver en hoe je processen afstemt op verkeer en hostingcapaciteit.
Ontdek hoe BIND als open DNS-serversoftware domeinen beheert, welke rollen het vervult en wanneer zelf beheren zinvol is.
Lees wat het Poolse REGON-register en -nummer betekenen, hoe ze verschillen van NIP en KRS en hoe je bedrijfsgegevens controleert.