Κέλυφος PWB

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια

Το κέλυφος PWB shellκέλυφος Mashey) ήταν ένα από τα πρώτα κελύφη του Unix που κυκλοφόρησε με κάποιες εκδόσεις του Programmer's Workbench UNIX γύρω στα 1975-1977. Ήταν μια τροποποιημένη (και γενικά περιορισμένη ώστε να είναι συμβατή προς τα εμπρός) έκδοση του κελύφους Thompson με επιπλέον χαρακτηριστικά για ευκολία προγραμματισμού, και συντηρήθηκε από τον John Mashey και αρκετούς άλλους (Dick Haight, Alan Glasser).

Σημαντικά χαρακτηριστικά[Επεξεργασία | επεξεργασία κώδικα]

Αν και σύντομα ξεπεράστηκε από το κέλυφος Bourne, αρκετά από τα χαρακτηριστικά που εμφανίστηκαν με το κέλυφος PWB παρέμειναν σε πολλά μεταγενέστερα κελύφη. Οι εντολές if και goto ήταν ενσωματωμένες στο κέλυφος και επεκτάθηκαν ώστε να επιτρέπουν τις εντολές συνθήκης if-then-else-endif και εισήχθησαν οι δομές switch και while, καθώς και η onintr που αγνοούσε τις διακοπές (interrupts) ή τις ανίχνευε για να εκτελέσει λειτουργίες καθαρισμού της κατάστασης του προγράμματος. Μπορούσαν να χρησιμοποιηθούν απλές μεταβλητές, αν και τα ονόματά τους περιορίζονταν σε ένα γράμμα και κάποια γράμματα κρατούνταν για ειδικούς λόγους, κάποια από τα οποία αποτέλεσαν και τους προγόνους των μεταβλητών περιβάλλοντος που υπήρχαν σε όλα τα Συστήματα UNIX από την έκδοση VII και έπειτα.

Για παράδειγμα, η μεταβλητή $s ήταν ο πρόγονος της $HOME, και χρησιμοποιούνταν για να αποφεύγεται η χρήση ρητών διαδρομών στο δίσκο. Η μεταβλητή $p ήταν ο πρόγονος της $PATH, η οποία επιτρέπει στο χρήστη να αναζητά τις εντολές σε καταλόγους της επιλογής του. Σε αντίθεση με τα πιο πολλά συστήματα UNIX της εποχής, το αρχικό κέντρο υπολογιστών PWB/UNIX μοιραζόταν από πολλές προγραμματιστικές ομάδες που δε μπορούσαν να αλλάξουν τα περιεχόμενα του /bin ή του /usr/bin, αλλά ήθελαν να κατασκευάσουν το δικό τους σύνολο από κοινές εντολές. Επιπλέον, η δυνατότητα αναζήτησης εντολών του κελύφους εμπλουτίστηκε ώστε να επιτρέπει την κλήση διαδικασιών του κελύφους σαν δυαδικές εντολές, δηλ. αν το κέλυφος έβρισκε ένα μη δυαδικό αρχείο που είχε σημειωθεί σαν εκτελέσιμο, δημιουργούσε ένα νέο στιγμιότυπο του κελύφους που διάβαζε το αρχείο αυτό σαν σενάριο κελύφους. Με αυτόν τον τρόπο ο χρήστης μπορούσε να πληκτρολογήσει εντολή παράμεροι αντί για sh διαδρομή/εντολή παράμετροι. Αυτή η συμπεριφορά ήταν πακεταρισμένη σαν η συνάρτηση pexec, η οποία ήταν ο πρόγονος της execvp που επιτρέπει σε κάθε πρόγραμμα να καλεί εντολές με τον ίδιο τρόπο με το κέλυφος.

Ο χαρακτήρας $, ο οποίος χρησιμοποιούνταν πριν για να σημειώνονται τα ορίσματα σε ένα σενάριο κελύφους, έγινε το σημείο της χρήσης της αναφοράς μιας μεταβλητής και μπορούσε να χρησιμοποιηθεί για να τοποθετήσει την τιμή μιας μεταβλητής σε μια συμβολοσειρά σε διπλά εισαγωγικά. (Εκτός από τα μεταγενέστερα κελύφη, αυτό το χαρακτηριστικό θα εμφανιζόταν και στις γλώσσες προγραμματισμού Perl και PHP.)

Απόγονοι[Επεξεργασία | επεξεργασία κώδικα]

Αυτά τα χαρακτηριστικά δε μπόρεσαν να ξεπεράσουν τα μειονεκτήματα του κελύφους Thompson και ένα νέο κέλυφος γράφτηκε από την αρχή από τον Stephen Bourne. Αυτό το κέλυφος Bourne δεν ήταν συμβατό με τα κελύφη Thompson και PWB, αλλά περιείχε ισοδύναμα των περισσότερων χαρακτηριστικών του κελύφους PWB, τα οποία είχαν δημιουργηθεί από την αρχή (και όχι σταδιακά) και σε συνεννόηση με άλλα άτομα που συμμετείχαν στο εγχείρημα. Ειδικότερα, οι μεταβλητές περιβάλλοντος και ό,τι ήταν σχετικό με αυτές σχεδιάστηκαν από τον Stephen Bourne, τον John Mashey και τον Dennis Ritchie σαν ένας γενικός μηχανισμός που θα αντικαθιστούσε τα προηγούμενα, πιο περιοριστικά χαρακτηριστικά. Μετά την υιοθέτηση του κελύφους Bourne σαν του βασικού κελύφους στην Έκδοση 7 του Unix, η χρήση του PWB αποθαρρύνθηκε και υποχώρησε, αν και για λίγο χρονικό διάστημα υπήρχε ένα εσωτερικό μάθημα στα Bell που ονομαζόταν Προγραμματισμός Κελύφους Bourne για Προγραμματιστές Κελύφους Mashey (Bourne Shell Programming for Mashey Shell Programmers). (Το κέλυφος C,που δημιουργήθηκε πριν τη δημόσια κυκλοφορία του κελύφους Bourne, επίσης κληρονόμησε κάποια από τα χαρακτηριστικά του κελύφους PWB.)

Δείτε επίσης[Επεξεργασία | επεξεργασία κώδικα]

Παραπομπές[Επεξεργασία | επεξεργασία κώδικα]