Το **κέλυφος Τόμσον** (**Thompson shell**) ήταν το πρώτο κέλυφος του Unix από τον Ken Thompson και εμφανίστηκε στην πρώτη έκδοση του Unix το 1971. Αν και ήταν ένας απλός διερμηνέας εντολών, που δεν είχε σχεδιαστεί για σενάρια (scripting), εισήγαγε αρκετές καινοτομίες στη γραμμή εντολών και οδήγησε στην ανάπτυξη των επόμενων κελύφων του Unix.

Ιστορία
-------

Το όνομα "κέλυφος" ("shell") για ένα διερμηνέα γραμμής εντολών και η ιδέα ότι το κέλυφος είναι άλλο ένα πρόγραμμα χρήστη έξω από τον πυρήνα του λειτουργικού συστήματος πρωτοεμφανίστηκαν από τον πρόγονο του Unix, το Multics.

Ένα πρώιμο χαρακτηριστικό του κελύφους Τόμσον ήταν μια σύντομη σύνταξη σχετικά με την είσοδο/έξοδο. Στο Multics η ανακατεύθυνση (redirection) της εισόδου ή της εξόδου μιας εντολής απαιτούσε ξεχωριστές εντολές για να αρχίσουν και να σταματήσουν την ανακατεύθυνση ενώ στο Unix μπορούσε κανείς να προσθέσει το σύμβολο < στη γραμμή εντολής, ακολουθούμενο από ένα όνομα αρχείου για είσοδο, ή το σύμβολο > για έξοδο, και το κέλυφος θα ανακατηύθυνε την είσοδο/έξοδο κατά τη διάρκεια της εντολής. Η σύνταξη υπήρχε ήδη στην πρώτη έκδοση του Unix που κυκλοφόρησε το 1971.

Αργότερα προστέθηκε η ιδέα των σωληνώσεων (pipes). Ο Douglas McIlroy πρότεινε να επεκταθεί η σύνταξη της ανακατεύθυνσης ώστε το αποτέλεσμα μιας εντολής να δίνεται σαν είσοδος σε κάποια άλλη εντολή. Η αρχική σύνταξη, όπως περιγράφηκε στο εγχειρίδιο της έκδοσης 3, ήταν:

```
εντολή1 >εντολή2>
```

Η σύνταξη αυτή αποδείχτηκε διφορούμενη και μπορούσε να ερμηνευτεί σαν ανακατεύθυνση από ή προς αρχεία. Στην έκδοση 4 άλλαξε και χρησιμοποιούνταν τα σύμβολα | και ^ για τις σωληνώσεις:

```
εντολή1 | εντολή2
```

Το παραπάνω είναι ισοδύναμο με το:

```
command1 ^ command2
```

Η σύνταξη του κελύφους Τόμσον για ανακατεύθυνση μέσω < και >, και σωληνώσεις μέσω |, έχει αντέξει στο χρόνο και έχει εφαρμοστεί στα περισσότερα άλλα κελύφη του Unix και σε κελύφη γραμμής εντολών άλλων λειτουργικών συστημάτων, όπως του DOS, του OS/2 και των Microsoft Windows.

Αντικατάσταση από άλλα κελύφη
-----------------------------

Το κέλυφος αρχικά σχεδιάστηκε με μινιμαλιστικό τρόπο: ακόμα και οι εντολές *if* και *goto*, που ήταν απαραίτητες για τον έλεγχο της ροής του προγράμματος, υλοποιήθηκαν σαν ξεχωριστές εντολές. Σαν αποτέλεσμα, ήταν ήδη φανερό από την έκδοση της έκδοσης 6 του Unix (Unix Version 6) το 1975, ότι το κέλυφος Τόμσον δεν αρκούσε για σοβαρό προγραμματισμό.

Εκείνη την περίοδο, οι προγραμματιστές της διανομής "Programmer's Workbench UNIX", και κυρίως ο John Mashey, άρχισαν τις μετατροπές στο κέλυφος Τόμσον για να το κάνουν πιο κατάλληλο για προγραμματισμό. Αποτέλεσμα ήταν το κέλυφος PWB ή κέλυφος Mashey, που περιλάμβανε πιο προχωρημένους μηχανισμούς ελέγχου της ροής και εισήγαγε τις μεταβλητές κελύφους, αν και περιορίστηκε από την ανάγκη να μείνει συμβατό με το κέλυφος Τόμσον.

Τέλος, σαν κύριο κέλυφος, το κέλυφος Τόμσον αντικαταστάθηκε από το κέλυφος Bourne στην έκδοση 7 του Unix (Unix Version 7) και από το κέλυφος C στο 2BSD, το 1979. Επειδή πρακτικά όλα τα σύγχρονα συστήματα Unix και τύπου Unix (Unix-like) αποτελούν απογόνους του V7 και του 2BSD, το κέλυφος Τόμσον δε χρησιμοποιείται πια. Είναι όμως ακόμα διαθέσιμο σαν λογισμικό ανοιχτού κώδικα, ως μέρος διάφορων διανομών πηγαίου κώδικα του Ancient Unix και έχει μεταφερθεί σε πολλά σύγχρονα συστήματα Unix σαν ιστορικό έκθεμα.

Δείτε επίσης
------------

* Κέλυφος (υπολογιστές)
* Διερμηνέας γραμμής εντολών

Εξωτερικοί σύνδεσμοι
--------------------

* Σελίδα εγχειριδίου (Manual page) για το κέλυφος Τόμσον στην 1η έκδοση του Unix. (Αγγλικά)
* The Evolution of the Unix Time-Sharing System Αρχειοθετήθηκε 2015-04-08 στο Wayback Machine. - περιγράφει την αρχική ανάπτυξη του κελύφους (Αγγλικά)
* Origins of the Bourne shell - σελίδες εγχειριδίου για τις εκδόσεις 3, 4, 5, 6 του κελύφους Τόμσον και άλλες πληροφορίες σχετικά με τα πρώτα κελύφη (Αγγλικά)
* Sixth Edition Thompson Shell Port - μεταφορά του κελύφους Τόμσον και των βοηθημάτων του για σύγχρονα συστήματα Unix (Αγγλικά)

|  |  |  |  |
| --- | --- | --- | --- |
| 

| π • σ • ε
Κελύφη του Unix |
| --- |
|  |
| 
* Bash
* Bourne
* (Debian) Almquist
* csh
* Es
* Esh
* Friendly interactive shell
* Korn
* PWB
* Perl
* Rc
* Scsh
* Stand-alone
* tcsh
* Τόμσον
* Wish
* Z
 |

 |