16. Bash vs. Cmd vs. PowerShell

Redan under MLT-programmets första vecka fick vi stifta bekantskap med Unix-kommandotolken. Unix avser en samling operativsystem som härstammar från det ursprungliga Unix-systemet, utvecklat av AT&T (American Telephone and Telegraph Company) under 70-talet (tack Wikipedia!). Det kännetecknas av Unix-filosofin, vilket bland annat avser strukturen med små verktygsprogram som enbart fokuserar på en enda uppgift, men som gör det väl och dessutom kan kombineras med varandra (Hoffman 2016).

Det senare har vi sett prov på när vi fått lära oss använda pipe (representerat av vertikalstrecket |), som gör så att utdata (stdout, eng. standard output) från ett program kan användas som indata (stdin, eng. standard input) till ett annat. Ett exempel på det är kommandot sorterad_lista.txt | tail -n+11 | head -n+10, där man för att ta ut elementen från rad 11-20 först tar ut allt från rad 11 och neråt med tail, och därefter matar in det som indata till head, som här väljer ut de 10 översta raderna.

Tydligen så hör inte bara Linux utan även Mac OS, Android och Chrome OS till de Unix-liknande operativsystemen (däremot inte Windows!), vilket kanske förklarar varför vi kan köra Unix-kommandon i terminalen på Apple-datorerna i labbsalen. Unix-kommandotolken kallas också för ett skalprogram/shell, och bash är en vanligt förekommande version av det. Bash (Bourne again shell, pga räknas som uppföljare till det tidigare Bourne shell) skapades inom ramen för GNU-projeket, släpptes 1989, och har använts flitigt i olika distributioner av Linus och Mac OS sedan dess. I likhet med andra Unix-skal stödjer det “[…] filename globbing (wildcard matching), piping, here documents, command substitution, variables, and control structures for condition-testing and iteration” (engelskspråkiga Wikipedia, 06-12-2019).

De första Unix-kommandona vi fick lära oss var av typen cd (change directory), ls (list), rm (remove), pwd (print working directory) och grep (används för att hitta specifika strängar i en fil). Det kändes trist när det sen visade sig att de (med undantag för cd) inte går att använda i Windows egna kommandtolk (även kallad cmd.exe eller bara cmd). Men det var först när Unix-kommandona återkom i en uppgift i efterföljande kurs som jag i ren desperation försökte hitta ett sätt att lösa det. Innan jag till slut lyckades få Ubuntu-tillägget för att köra bash i Windows att fungera (en nyhetsbomb för Windows 10 som droppades 2016 - tidigare var man tydligen tvungen att köra tredje part-verktyg som Cygwin eller virtuella maskiner) försökte jag lite allt möjligt, och märkte av en slump att några av mina Unix-kommandon fungerade i Windows PowerShell.

PowerShell-terminalen

Eftersom jag är en ovan kommandoradsanvändare kände jag mig nödgad att reda ut hur PowerShell skiljer sig från Windows vanliga kommandotolk cmd. Cmd har funnits sedan 80-talet, och jag blev lite töntigt glad i hjärtat när jag läste att det var en kvinnlig programmerare som utvecklat det, Therese Stowell. Cmd-motsvarigheterna för Unix vanliga kommandon kan man läsa här, men rent generellt så verkar cmd betraktas som en mer begränsad applikation än Unix-motsvarigheterna som bash. Cmd kan hämta information, felhantera och exekvera batchfiler, men verkar till exempel inte kunna utföra de pipe-operationer som Unix-skalen kan. Det kan däremot PowerShell.

PowerShell lanserades 2006 och är ett kraftfullare verktyg än cmd. Det är standardterminalen från och med Windows 10 (även om cmd fortfarande går att använda) och som tydligen står sig ganska bra gentemot Unix-skalen (Hoffman 2017). Den använder sig av andra kommandon som kallas cmdlets (command-lets), och som kan kommunicera med varandra liksom Unix-kommandon. Skillnaden ligger i att medan Unix-skalen har textsträngar som in- och utdata, använder sig PowerShell av objekt som kan skickas mellan cmdletserna. PowerShell kan användas för att automatisera administrativa uppgifter, som att döpa om en massa filer i ett svep: “This is the sort of thing that Linux users have always been able to do with their command-line environment, while Windows users were left out” (Hoffman 2017).

Written on December 7, 2019