Non tutte le shell sono uguali

Non tutte le shell sono uguali

Forse vi sarà capitato qualche volta di copiare qualche script e accorgervi che non funzionava senza magari riuscire a capire perché. Oppure avrete notato che alcuni script iniziano con #!/bin/sh e altri con #!/bin/bash . Perplessi? Niente paura, facciamo un po' d'ordine!

cos'è una shell

Una shell è un programma come tutti gli altri, viene eseguito dal sistema operativo quando fate il login e viene "agganciato" ad un canale di comunicazione con voi. Questo canale di comunicazione può essere via rete, ad esempio ssh, oppure locale quando aprite una finestra "terminale", e solitamente viene chiamato virtual console perché una volta invece questi canali di comunicazione erano fisici: dei grossi cavi che portavano a dei terminali veri e propri, tipo il mitico DEC VT100.

Descrizione dell'immagine

Un terminale, fisico o virtuale, di fatto è in grado di raccogliere l'input dalla tastiera e di rappresentare sul video l'output di qualsiasi programma. La shell è semplicemente un programma che viene lanciato per interagire con un operatore. Come abbiamo già detto la prima shell per il SO Unix fu creata da Ken Thompson, e seppure ancora non prevedesse la possibilità di essere programmata atraverso scripting, introduceva già concetti che usiamo ancora oggi come la redirezione dell'input e dell'output.

In principio era sh

La Thompson shell fu utilizzata nelle prime versioni di Unix fino al 1979 quando venne sostituita dalla Bourne Shell, sviluppata da Stephen Bourne ai Bell Labs, il cui eseguibile si chiamava semplicemente sh. La Bourne shell conteneva già tutte quelle funzionalità che troviamo e usiamo nelle shell di oggi, come la programmabilità, la possibilità di redirigere input e output dei programmi, la gestione delle variabili d'ambiente.

Che shell usiamo oggi?

Tutti i sistemi Linux diffusi oggi utilizzano bash, una shell sviluppata nel 1989-90 da Chet Ramey all'interno del progetto GNU. La bash è di fatto un clone della originaria Bourne Shell, infatti il nome bash sta per Bourne Again Shell ed è anche un gioco di parole visto che in inglese suona simile a born-again shell, ossia la shell rinata.

Sui sistemi di derivazione BSD invece, la shell bash non è stata inclusa nel sistema base per problemi di licenza: la licenza GNU non è compatibile con la più permissiva licenza BSD. Si può ovviamente installarla in modo semplice dalla collezione di ports standard, ma come default su FreeBSD ad oggi vengono utilizzatate o una shell sh completamente compatibile con l'originaria Bourne Shell (normalmente assegnata agli utenti standard) oppure la tcsh (usata per default da root). Tcsh è una shell basata sulla shell csh che fu originariamente creata da Bill Joy quando era studente a Berkley verso la fine degli anni '70.

Compatibilità

Come potete facilmente immaginare le funzionalità di queste shell sono molto simili ma ognuna di esse presenta qualche caratteristica particolare. Non è questa la sede per fare una disamina completa delle piccole differenze tra le varie shell, voglio solo raccomandarvi attenzione quando reperite script o esempi in rete dato che non è scontata la compatibilità di quanto trovate con la shell che state usando.

Approfondimenti: https://en.wikipedia.org/wiki/Shell_(computing) https://en.wikipedia.org/wiki/Bourne_shell https://it.wikipedia.org/wiki/Bash https://en.wikipedia.org/wiki/Tcsh

Currently there are no comments, so be the first!