sh vs bash : Een samenvatting
Als u dit leest, is de kans groot dat u in het verleden de termen shell, sh, bash enzovoort bent tegengekomen. Deze termen kunnen verwarrend klinken en aangezien ze nauw verwant zijn maakt dat het probleem alleen maar erger. Dus besloot ik deze post te schrijven met het doel om te proberen de verschillen tussen hen uit te leggen.
Shell vs Kernel
Voordat we verder gaan is het belangrijk dat we begrijpen wat de termen shell en kernel betekenen.
Kernel
De kernel is de spil van het besturingssysteem. Het is verantwoordelijk voor dingen als interactie met hardware, bestands-I/O, en het spawnen van processen.
Shell
De shell fungeert als een interface tussen de gebruiker en de kernel. Technisch gesproken is een shell een opdrachtregelinterpreter, d.w.z. het programma dat ofwel de opdrachten interpreteert die u in uw terminalemulator invoert (interactieve modus), ofwel shellscripts verwerkt (tekstbestanden met opdrachten).
Nu we een idee hebben van wat de shell en kernel zijn, kunnen we proberen sh en Bash te begrijpen.
sh
Strikt genomen is sh (of de Shell Command Language) een programmeertaal die wordt beschreven door de POSIX-standaard. Het belangrijkste hier is dat sh op zichzelf niet echt een programmeertaal is. Het is slechts een specificatie. Specificatie is een gedetailleerde beschrijving van de syntaxis en semantiek van die taal. Specificatie omvat geen implementatie.
Bash
Er zijn verschillende besturingssystemen met hun eigen shells en kernel. Bash is de shell voor het GNU-besturingssysteem. Maar we kunnen ook zeggen dat bash een programmeertaal is.
Wacht, is dat niet verwarrend? Is bash zowel een shell als een programmeertaal?
Denk aan python. We kunnen Python ook in interactieve modus starten en het gedraagt zich als een shell. Of JavaScript, of Ruby of welke scripttaal dan ook.
Blijkt dat logisch?
Bash is dus een programmeertaal die kan worden beschouwd als een implementatie van sh (hoewel dat in de loop der tijd is veranderd).
Om kort te gaan, sh is een specificatie, bash is de implementatie.