- ΣΥΝΟΨΗ
- ΠΕΡΙΓΡΑΦΗ
- Επισκόπηση
- Ενεργοποίηση
- Επεξεργασία Λίστας Ορισμάτων
- Λεκτική Δομή
- Αποκωδικοποίηση
- Ανάστροφη Κάθετος
- Απλές Εισαγωγικές
- Διπλές Εισαγωγικές
- Δεσμευμένες Λέξεις
- Αλυσίδες
- Εντολές
- Απλές Εντολές
- Ανακατευθύνσεις
- Αναζήτηση και Εκτέλεση
- Αναζήτηση Διαδρομής
- Κατάσταση Εξόδου Εντολής
- Σύνθετες εντολές
- Σωλήνες (Pipelines)
- Εντολές στο παρασκήνιο – &
- Λίστες – Γενικά
- Σύντομοι Τελεστές Λίστας
- Δομές Ελέγχου Ροής – if, while, for, case
- Ομαδοποίηση Εντολών
- Συναρτήσεις
- Μεταβλητές και Παράμετροι
- Θέσιες Παράμετροι
- Ειδικές Παράμετροι
- Διευρύνεται στον αριθμό των θέσιων παραμέτρων.
- Επεκτάσεις Λέξεων
- Επέκταση Tilde (αντικατάσταση του καταλόγου αρχικής σελίδας ενός χρήστη)
- Επέκταση Παραμέτρων
- Αντικατάσταση εντολών
- Αριθμητική επέκταση
- Διαχωρισμός λευκού διαστήματος (Διαχωρισμός πεδίων)
- Επέκταση ονομάτων αρχείων (Δημιουργία ονομάτων αρχείων)
- Πρότυπα Shell
- Ενσωματωμένες εντολές
- Επεξεργασία Γραμμής Εντολών
- ΚΑΤΑΣΤΑΣΗ ΕΞΟΔΟΥ
- ΠΕΡΙΒΑΛΛΟΝ
- ΑΡΧΕΙΑ
- ΔΕΙΤΕ ΕΠΙΣΗΣ
- ΙΣΤΟΡΙΚΟ
- ΣΦΑΛΜΑΤΑ
dash — διερμηνέας εντολών (shell)
ΣΥΝΟΨΗ
dash [-aCefnuvxIimqVEbp] [+aCefnuvxIimqVEbp] [-o option_name] [+o option_name]
[command_file [argument ...]]
dash -c [-aCefnuvxIimqVEbp] [+aCefnuvxIimqVEbp] [-o option_name] [+o option_name] command_string
[command_name [argument ...]]
dash -s [-aCefnuvxIimqVEbp] [+aCefnuvxIimqVEbp] [-o option_name] [+o option_name] [argument ...]
ΠΕΡΙΓΡΑΦΗ
Το dash είναι ο τυπικός διερμηνέας εντολών για το σύστημα. Η τρέχουσα έκδοση του dash βρίσκεται
στη διαδικασία αλλαγής, ώστε να συμμορφώνεται με τις προδιαγραφές POSIX 1003.2 και 1003.2a για το
shell. Αυτή η έκδοση διαθέτει πολλές δυνατότητες που την κάνουν να μοιάζει σε ορισμένες πτυχές με το
Korn shell, αλλά δεν είναι κλώνος του Korn shell (δείτε ksh(1)). Μόνο οι δυνατότητες που ορίζονται
από το POSIX, καθώς και μερικές επεκτάσεις Berkeley, ενσωματώνονται σε αυτό το shell. Αυτή η
σελίδα man δεν προορίζεται να είναι ένα μάθημα ή μια πλήρης προδιαγραφή του shell.
Επισκόπηση
Το shell είναι μια εντολή που διαβάζει γραμμές από ένα αρχείο ή από το τερματικό, τις ερμηνεύει και γενικά εκτελεί άλλες εντολές. Είναι το πρόγραμμα που εκτελείται όταν ένας χρήστης συνδέεται στο σύστημα (αν και ένας χρήστης μπορεί να επιλέξει ένα διαφορετικό shell με την εντολή chsh(1)). Το shell υλοποιεί μια γλώσσα που διαθέτει κατασκευές ελέγχου ροής, μια εγκατάσταση μακροεντολών που παρέχει μια ποικιλία λειτουργιών επιπλέον της αποθήκευσης δεδομένων, καθώς και ενσωματωμένες δυνατότητες ιστορικού και επεξεργασίας γραμμής. Περιλαμβάνει πολλές δυνατότητες για να βοηθήσει στην διαδραστική χρήση και έχει το πλεονέκτημα ότι η ερμηνευτική γλώσσα είναι κοινή τόσο για διαδραστική όσο και για μη διαδραστική χρήση (scripts shell). Δηλαδή, οι εντολές μπορούν να εισαχθούν απευθείας στο shell που εκτελείται ή μπορούν να τοποθετηθούν σε ένα αρχείο και το αρχείο μπορεί να εκτελεστεί απευθείας από το shell.
Ενεργοποίηση
Εάν δεν υπάρχουν ορίσματα και εάν η τυπική είσοδος του shell είναι συνδεδεμένη σε ένα τερματικό (ή εάν η σημαία -i έχει οριστεί), και η επιλογή -c δεν είναι παρούσα, το shell θεωρείται διαδραστικό shell. Ένα διαδραστικό shell συνήθως ζητά προτροπή πριν από κάθε εντολή και χειρίζεται διαφορετικά τα προγραμματιστικά και τα σφάλματα εντολών (όπως περιγράφεται παρακάτω). Όταν ξεκινά για πρώτη φορά, το shell επιθεωρεί το όρισμα 0 και, εάν ξεκινά με μια παύλα ‘-’, το shell θεωρείται επίσης ως shell σύνδεσης. Αυτό γίνεται συνήθως αυτόματα από το σύστημα όταν ο χρήστης συνδέεται για πρώτη φορά. Ένα shell σύνδεσης διαβάζει πρώτα εντολές από τα αρχεία /etc/profile και .profile, εάν υπάρχουν. Εάν η μεταβλητή περιβάλλοντος ENV έχει οριστεί κατά την είσοδο σε ένα διαδραστικό shell, ή έχει οριστεί στο αρχείο .profile ενός shell σύνδεσης, το shell διαβάζει στη συνέχεια εντολές από το αρχείο που καθορίζεται στην ENV. Επομένως, ένας χρήστης θα πρέπει να τοποθετήσει εντολές που θα εκτελούνται μόνο κατά τη σύνδεση στο αρχείο .profile και εντολές που θα εκτελούνται για κάθε διαδραστικό shell στο αρχείο ENV. Για να ορίσετε τη μεταβλητή ENV σε ένα αρχείο, τοποθετήστε την επόμενη γραμμή στο αρχείο .profile του καταλόγου σας:
ENV=$HOME/.shinit; export ENV
αντικαθιστώντας το “.shinit” με οποιοδήποτε όνομα αρχείου επιθυμείτε.
Εάν έχουν καθοριστεί επιπλέον ορίσματα γραμμής εντολών εκτός από τις επιλογές, τότε το shell αντιμετωπίζει το πρώτο όρισμα ως το όνομα ενός αρχείου από το οποίο θα διαβάσει εντολές (ένα σενάριο shell) και τα υπόλοιπα ορίσματα ορίζονται ως οι παραμετρικές μεταβλητές του shell ($1, $2, κ.λπ.). Διαφορετικά, το shell διαβάζει εντολές από την τυπική είσοδο.
Επεξεργασία Λίστας Ορισμάτων
Όλες οι επιλογές μεμονωμένων γραμμάτων που έχουν μια αντίστοιχη ονομασία μπορούν να χρησιμοποιηθούν ως όρισμα για την επιλογή -o. Η εντολή set -o name παρέχεται δίπλα στην επιλογή μεμονωμένου γράμματος στην περιγραφή παρακάτω. Η χρήση ενός θαύματος “-” ενεργοποιεί την επιλογή, ενώ η χρήση ενός συν “+” την απενεργοποιεί. Οι ακόλουθες επιλογές μπορούν να οριστούν από τη γραμμή εντολών ή με την ενσωματωμένη εντολή set (που περιγράφεται αργότερα).
-a allexport Εξαγωγή όλων των μεταβλητών που έχουν εκχωρηθεί.
-c Ανάγνωση εντολών από το όρισμα command_string αντί για την τυπική είσοδο. Η ειδική παράμετρος 0 θα οριστεί από το όρισμα command_name και οι παραμετρικές μεταβλητές ($1, $2, κ.λπ.) θα οριστούν από τα υπόλοιπα ορίσματα.
-C noclobber Μην αντικαθιστάτε τα υπάρχοντα αρχεία με το “>”.
-e errexit Εάν δεν είναι διαδραστικό, τερματίστε αμέσως εάν οποιαδήποτε μη ελεγμένη εντολή αποτύχει. Η κατάσταση εξόδου μιας εντολής θεωρείται ότι έχει ελεγχθεί ρητά εάν η εντολή χρησιμοποιείται για τον έλεγχο ενός if, elif, while ή until. ή εάν η εντολή είναι η αριστερή πλευρά του τελεστή “&&” ή “||”.
-f noglob Απενεργοποιήστε την επέκταση των ονομάτων αρχείων.
-n noexec Εάν δεν είναι διαδραστικό, διαβάστε τις εντολές αλλά μην τις εκτελέσετε. Αυτό είναι χρήσιμο για τον έλεγχο της σύνταξης των σεναρίων shell.
-u nounset Γράψτε ένα μήνυμα στην τυπική έξοδο σφάλματος κατά την προσπάθεια επέκτασης μιας μεταβλητής που δεν έχει οριστεί και, εάν το shell δεν είναι διαδραστικό, τερματίστε αμέσως.
-v verbose Το shell γράφει την είσοδό του στην τυπική έξοδο σφάλματος καθώς διαβάζεται. Χρήσιμο για την αποσφαλμάτωση.
-x xtrace Γράψτε κάθε εντολή στην τυπική έξοδο σφάλματος (με ένα ‘+ ’ μπροστά) πριν εκτελεστεί. Χρήσιμο για την αποσφαλμάτωση.
-I ignoreeof Αγνόησε τα EOF από την είσοδο όταν είναι διαδραστικό.
-i interactive Αναγκάστε το shell να συμπεριφέρεται διαδραστικά.
-l Κάντε το dash να συμπεριφέρεται σαν να είχε κληθεί ως διαδραστικό shell.
-m monitor Ενεργοποιήστε τον έλεγχο εργασιών (ορίζεται αυτόματα όταν είναι διαδραστικό).
-s stdin Διαβάστε εντολές από την τυπική είσοδο (ορίζεται αυτόματα εάν δεν υπάρχουν ορίσματα αρχείων). Αυτή η επιλογή δεν έχει καμία επίδραση όταν έχει οριστεί μετά την έναρξη εκτέλεσης του shell (π.χ. με την εντολή set).
-V vi Ενεργοποιεί τον ενσωματωμένο επεξεργαστή γραμμής εντολών vi(1) (απενεργοποιεί το -E εάν έχει οριστεί).
-E emacs Ενεργοποιεί τον ενσωματωμένο επεξεργαστή γραμμής εντολών [emacs](filename}emacs.md)(1) (απενεργοποιεί το -V εάν έχει οριστεί).
-b notify Ενεργοποιεί την ασύγχρονη ειδοποίηση για την ολοκλήρωση εργασιών παρασκηνίου. (ΔΕΝ ΥΛΟΠΟΙΕΙΤΑΙ για την έκδοση 4.4alpha)
-p priviliged Μην επιχειρήσετε να επαναφέρετε το αποτελεσματικό uid εάν δεν ταιριάζει με το uid. Αυτό δεν ορίζεται από προεπιλογή για να αποφευχθεί η εσφαλμένη χρήση από προγράμματα setuid root μέσω των συναρτήσεων system(3) ή popen(3).
Λεκτική Δομή
Το κέλυφος διαβάζει την είσοδο με τη μορφή γραμμών από ένα αρχείο και τη διασπά σε λέξεις στα κενά (κενά και καρτέλες) και σε ορισμένες ακολουθίες χαρακτήρων που είναι ειδικές για το κέλυφος και ονομάζονται «τελεστές». Υπάρχουν δύο τύποι τελεστών: τελεστές ελέγχου και τελεστές ανακατεύθυνσης (η σημασία τους συζητείται αργότερα). Ακολουθεί μια λίστα με τους τελεστές:
Τελεστές ελέγχου:
& && ( ) ; ;; | ||
Τελεστές ανακατεύθυνσης: < > >| << >> <& >& <<- <>
Αποκωδικοποίηση
Η αποκωδικοποίηση χρησιμοποιείται για να αφαιρεθεί η ειδική σημασία ορισμένων χαρακτήρων ή λέξεων για το κέλυφος, όπως οι τελεστές, τα κενά ή οι λέξεις-κλειδιά. Υπάρχουν τρεις τύποι αποκωδικοποίησης: αντιστοιχισμένες απλές εισαγωγικές, αντιστοιχισμένες διπλές εισαγωγικές και ανάστροφη κάθετο.
Ανάστροφη Κάθετος
Μια ανάστροφη κάθετος διατηρεί τη κυριολεκτική σημασία του επόμενου χαρακτήρα, με εξαίρεση την ⟨newline⟩. Μια ανάστροφη κάθετος που προηγείται μιας ⟨newline⟩ αντιμετωπίζεται ως συνέχεια γραμμής.
Απλές Εισαγωγικές
Η περικλειόμενη χρήση απλών εισαγωγικών διατηρεί τη κυριολεκτική σημασία όλων των χαρακτήρων (εκτός από τις απλές εισαγωγικές, καθιστώντας αδύνατη την εισαγωγή απλών εισαγωγικών μέσα σε μια συμβολοσειρά με απλές εισαγωγικές).
Διπλές Εισαγωγικές
Η περικλειόμενη χρήση διπλών εισαγωγικών διατηρεί τη κυριολεκτική σημασία όλων των χαρακτήρων, εκτός από το σύμβολο δολαρίου ($), την ανάστροφη κάθετο (`) και την ανάστροφη κάθετο (\). Η ανάστροφη κάθετος μέσα σε διπλές εισαγωγικές έχει ιστορικά περίεργη συμπεριφορά και χρησιμοποιείται για να κάνει απόσπασμα μόνο τους ακόλουθους χαρακτήρες:
$ ` " \ <newline>.
Διαφορετικά, παραμένει κυριολεκτική.
Δεσμευμένες Λέξεις
Οι δεσμευμένες λέξεις είναι λέξεις που έχουν ειδική σημασία για το κέλυφος και αναγνωρίζονται στην αρχή μιας γραμμής και μετά από έναν τελεστή ελέγχου. Οι ακόλουθες είναι δεσμευμένες λέξεις:
! elif fi while case
else for then { }
do done until if esac
Η σημασία τους συζητείται αργότερα.
Αλυσίδες
Μια αλυσίδα είναι ένα όνομα και μια αντίστοιχη τιμή που ορίζονται χρησιμοποιώντας την ενσωματωμένη εντολή alias(1). Όποτε μια δεσμευμένη λέξη μπορεί να εμφανιστεί (βλέπε παραπάνω) και μετά τον έλεγχο για δεσμευμένες λέξεις, το κέλυφος ελέγχει αν η λέξη ταιριάζει με μια αλυσίδα. Εάν ταιριάζει, την αντικαθιστά στη ροή εισόδου με την τιμή της. Για παράδειγμα, εάν υπάρχει μια αλυσίδα που ονομάζεται «lf» με την τιμή «ls -F», τότε η είσοδος:
lf foobar ⟨return⟩
θα γινόταν
ls -F foobar ⟨return⟩
Οι αλυσίδες παρέχουν έναν βολικό τρόπο για τους αφελείς χρήστες να δημιουργούν συντομεύσεις για εντολές χωρίς να χρειάζεται να μάθουν πώς να δημιουργούν συναρτήσεις με ορίσματα. Μπορούν επίσης να χρησιμοποιηθούν για τη δημιουργία λεκτικά ασαφούς κώδικα. Αυτή η χρήση αποθαρρύνεται.
Εντολές
Το shell ερμηνεύει τις λέξεις που διαβάζει σύμφωνα με μια γλώσσα, της οποίας οι προδιαγραφές είναι εκτός του πεδίου εφαρμογής αυτής της σελίδας man (ανατρέξτε στο BNF στο έγγραφο POSIX 1003.2). Στην ουσία, μια γραμμή διαβάζεται και εάν η πρώτη λέξη της γραμμής (ή μετά από έναν τελεστή ελέγχου) δεν είναι μια δεσμευμένη λέξη, τότε το shell έχει αναγνωρίσει μια απλή εντολή. Διαφορετικά, μπορεί να έχει αναγνωριστεί μια σύνθετη εντολή ή κάποια άλλη ειδική κατασκευή.
Απλές Εντολές
Εάν έχει αναγνωριστεί μια απλή εντολή, το shell εκτελεί τις ακόλουθες ενέργειες:
Οι αρχικές λέξεις της μορφής "name=value" αφαιρούνται και αντιστοιχίζονται στο περιβάλλον
της απλής εντολής. Οι τελεστές ανακατεύθυνσης και τα ορίσματά τους (όπως περιγράφεται
παρακάτω) αφαιρούνται και αποθηκεύονται για επεξεργασία.
Οι υπόλοιπες λέξεις επεκτείνονται όπως περιγράφεται στην ενότητα με τίτλο "Επεκτάσεις" και
η πρώτη από τις υπόλοιπες λέξεις θεωρείται όνομα εντολής και η εντολή εντοπίζεται. Οι
υπόλοιπες λέξεις θεωρούνται τα ορίσματα της εντολής. Εάν δεν προέκυψε όνομα εντολής, τότε οι
αναθέσεις μεταβλητών "name=value" που αναγνωρίστηκαν στο στοιχείο 1 επηρεάζουν το τρέχον shell.
Οι ανακατευθύνσεις εκτελούνται όπως περιγράφεται στην επόμενη ενότητα.
Ανακατευθύνσεις
Οι ανακατευθύνσεις χρησιμοποιούνται για την αλλαγή του τρόπου με τον οποίο μια εντολή διαβάζει τις εισόδους της ή στέλνει τις εξόδους της. Γενικά, οι ανακατευθύνσεις ανοίγουν, κλείνουν ή αντιγράφουν μια υπάρχουσα αναφορά σε ένα αρχείο. Η γενική μορφή που χρησιμοποιείται για την ανακατεύθυνση είναι:
[n] redir-op file
όπου το redir-op είναι ένας από τους τελεστές ανακατεύθυνσης που αναφέρονται παραπάνω. Ακολουθεί μια
λίστα με τις πιθανές ανακατευθύνσεις. Το [n] είναι ένας προαιρετικός αριθμός μεταξύ 0 και 9, όπως
στο '3' (όχι '[3]'), που αναφέρεται σε μια περιγραφέας αρχείου.
[n]> file Ανακατεύθυνση της τυπικής εξόδου (ή του n) στο αρχείο.
[n]>| file Το ίδιο, αλλά παρακάμπτει την επιλογή -C.
[n]>> file Προσάρτηση της τυπικής εξόδου (ή του n) στο αρχείο.
[n]< file Ανακατεύθυνση της τυπικής εισόδου (ή του n) από το αρχείο.
[n1]<&n2 Αντιγραφή της περιγραφέας αρχείου n2 ως τυπική έξοδο (ή περιγραφέα n1). περιγραφέας n2.
[n]<&- Κλείσιμο της τυπικής εισόδου (ή του n).
[n1]>&n2 Αντιγραφή της περιγραφέας αρχείου n2 ως τυπική είσοδο (ή περιγραφέα n1). περιγραφέας n2.
[n]>&- Κλείσιμο της τυπικής εξόδου (ή του n).
[n]<> file Άνοιγμα του αρχείου για ανάγνωση και εγγραφή στην τυπική είσοδο (ή στον n).
Η ακόλουθη ανακατεύθυνση ονομάζεται συχνά "έγγραφο εδώ".
[n]<< delimiter
here-doc-text ...
delimiter
Όλο το κείμενο στις επόμενες γραμμές μέχρι το διαχωριστικό αποθηκεύεται και διατίθεται στην εντολή στην τυπική είσοδο ή στην περιγραφέα αρχείου n, εάν έχει καθοριστεί. Εάν το διαχωριστικό που καθορίζεται στην αρχική γραμμή έχει εισαγωγικά, τότε το here-doc-text αντιμετωπίζεται κατά λέξη, διαφορετικά το κείμενο υπόκειται σε επέκταση παραμέτρων, αντικατάσταση εντολών και αριθμητική επέκταση (όπως περιγράφεται στην ενότητα "Επεκτάσεις"). Εάν ο τελεστής είναι "<<" αντί για "<<-", τότε οι αρχικές κάθετες γραμμές στο here-doc-text διαγράφονται.
Αναζήτηση και Εκτέλεση
Υπάρχουν τρεις τύποι εντολών: συναρτήσεις shell, ενσωματωμένες εντολές και κανονικά προγράμματα – και η εντολή αναζητείται (με όνομα) με αυτή τη σειρά. Κάθε μία από αυτές εκτελείται με διαφορετικό τρόπο.
Όταν εκτελείται μια συνάρτηση shell, όλες οι παραμετρικές μεταβλητές του shell (εκτός από την $0, η οποία παραμένει αμετάβλητη) ορίζονται στις παραμέτρους της συνάρτησης shell. Οι μεταβλητές στις οποίες γίνεται ρητή ανάθεση στο περιβάλλον της εντολής (με την τοποθέτηση αναθέσεων σε αυτές πριν από το όνομα της συνάρτησης) γίνονται τοπικές για τη συνάρτηση και ορίζονται στις δεδομένες τιμές. Στη συνέχεια, εκτελείται η εντολή που δίνεται στον ορισμό της συνάρτησης. Οι παραμετρικές μεταβλητές επαναφέρονται στις αρχικές τους τιμές όταν ολοκληρωθεί η εντολή. Όλα αυτά συμβαίνουν εντός του τρέχοντος shell.
Οι ενσωματωμένες εντολές shell εκτελούνται εσωτερικά στο shell, χωρίς τη δημιουργία μιας νέας διεργασίας.
Διαφορετικά, εάν το όνομα της εντολής δεν ταιριάζει με μια συνάρτηση ή μια ενσωματωμένη εντολή, η εντολή αναζητείται ως ένα κανονικό πρόγραμμα στο σύστημα αρχείων (όπως περιγράφεται στην επόμενη ενότητα). Όταν εκτελείται ένα κανονικό πρόγραμμα, το shell εκτελεί το πρόγραμμα, περνώντας τις παραμέτρους και το περιβάλλον στο πρόγραμμα. Εάν το πρόγραμμα δεν είναι ένα κανονικό εκτελέσιμο αρχείο (δηλαδή, εάν δεν ξεκινά με τον "μαγικό αριθμό" του οποίου η αναπαράσταση ASCII είναι "#!", έτσι ώστε το execve(2) να επιστρέφει ENOEXEC), το shell θα ερμηνεύσει το πρόγραμμα σε ένα υπο-shell. Το παιδικό shell θα επαναπροσδιορίσει τον εαυτό του σε αυτή την περίπτωση, έτσι ώστε το αποτέλεσμα να είναι σαν να είχε κληθεί ένα νέο shell για να χειριστεί το ad-hoc σενάριο shell, εκτός από το γεγονός ότι η θέση των κατακερματισμένων εντολών που βρίσκονται στο γονικό shell θα θυμάται το παιδικό shell.
Σημειώστε ότι οι προηγούμενες εκδόσεις αυτού του εγγράφου και η ίδια η πηγή του κώδικα αναφέρουν παραπλανητικά και σποραδικά ένα σενάριο shell χωρίς έναν μαγικό αριθμό ως μια "διαδικασία shell".
Αναζήτηση Διαδρομής
Όταν εντοπίζει μια εντολή, το shell ελέγχει πρώτα εάν υπάρχει μια συνάρτηση shell με αυτό το όνομα. Στη συνέχεια, αναζητά μια ενσωματωμένη εντολή με αυτό το όνομα. Εάν δεν βρεθεί μια ενσωματωμένη εντολή, συμβαίνουν ένα από τα δύο:
Τα ονόματα εντολών που περιέχουν μια κάθετο εκτελούνται απλά χωρίς να πραγματοποιηθούν αναζητήσεις.
Το shell αναζητά κάθε καταχώρηση στο `PATH` με τη σειρά για την εντολή. Η τιμή της μεταβλητής `PATH` θα πρέπει να είναι μια σειρά από καταχωρήσεις που διαχωρίζονται με άνω και κάτω τελείες. Κάθε καταχώρηση αποτελείται από ένα όνομα καταλόγου. Ο τρέχων κατάλογος μπορεί να υποδεικνύεται έμμεσα με έναν κενό κατάλογο ή ρητά με μια απλή τελεία.
Κατάσταση Εξόδου Εντολής
Κάθε εντολή έχει μια κατάσταση εξόδου που μπορεί να επηρεάσει τη συμπεριφορά άλλων εντολών shell. Η παράδειγμα είναι ότι μια εντολή εξέρχεται με μηδέν για κανονική ή επιτυχία και με μη μηδενικό για αποτυχία, σφάλμα ή μια ψευδή ένδειξη. Η σελίδα man για κάθε εντολή θα πρέπει να υποδεικνύει τις διάφορες κωδικούς εξόδου και τι σημαίνουν. Επιπλέον, οι ενσωματωμένες εντολές επιστρέφουν κωδικούς εξόδου, όπως και μια εκτελούμενη συνάρτηση shell.
Εάν μια εντολή αποτελείται αποκλειστικά από αναθέσεις μεταβλητών, τότε η κατάσταση εξόδου της εντολής είναι αυτή της τελευταίας αντικατάστασης εντολών, εάν υπάρχει, διαφορετικά 0.
Σύνθετες εντολές
Οι σύνθετες εντολές είναι συνδυασμοί απλών εντολών με τελεστές ελέγχου ή δεσμευμένες λέξεις, δημιουργώντας έτσι μια μεγαλύτερη σύνθετη εντολή. Γενικότερα, μια εντολή είναι ένα από τα ακόλουθα:
απλή εντολή
σωλήνας (pipeline)
λίστα ή σύνθετη λίστα
σύνθετη εντολή
ορισμός συνάρτησης
Εκτός αν ορίζεται διαφορετικά, η κατάσταση εξόδου μιας εντολής είναι αυτή της τελευταίας απλής εντολής που εκτελέστηκε από την εντολή.
Σωλήνες (Pipelines)
Ένας σωλήνας είναι μια ακολουθία μιας ή περισσότερων εντολών που χωρίζονται με τον τελεστή ελέγχου |. Η τυπική έξοδος όλων των εντολών εκτός από την τελευταία συνδέεται με την τυπική είσοδο της επόμενης εντολής. Η τυπική έξοδος της τελευταίας εντολής κληρονομείται από το κέλυφος, όπως συνήθως.
Η μορφή για έναν σωλήνα είναι:
[!] εντολή1 [| εντολή2 ...]
Η τυπική έξοδος της εντολής1 συνδέεται με την τυπική είσοδο της εντολής2. Η τυπική είσοδος, η τυπική έξοδος ή και τα δύο μιας εντολής θεωρούνται ότι έχουν εκχωρηθεί από τον σωλήνα πριν από οποιαδήποτε ανακατεύθυνση που καθορίζεται από τους τελεστές ανακατεύθυνσης που αποτελούν μέρος της εντολής.
Εάν ο σωλήνας δεν εκτελείται στο παρασκήνιο (θα αναφερθεί αργότερα), το κέλυφος περιμένει να ολοκληρωθούν όλες οι εντολές.
Εάν η επιλογή pipefail ήταν ενεργοποιημένη όταν το κέλυφος ξεκίνησε την εκτέλεση του σωλήνα, η κατάσταση εξόδου του σωλήνα είναι η κατάσταση εξόδου της τελευταίας εντολής που καθορίστηκε στον σωλήνα και η οποία εξήλθε με μη μηδενική κατάσταση, ή μηδέν εάν όλες οι εντολές στον σωλήνα εξήλθαν με κατάσταση μηδέν. Εάν η επιλογή pipefail δεν ήταν ενεργοποιημένη, η κατάσταση εξόδου του σωλήνα είναι η κατάσταση εξόδου της τελευταίας εντολής που καθορίστηκε στον σωλήνα. Οι καταστάσεις εξόδου οποιωνδήποτε άλλων εντολών δεν χρησιμοποιούνται. Εάν η δεσμευμένη λέξη ! προηγείται του σωλήνα, η κατάσταση εξόδου του είναι η λογική άρνηση της καταστάσεως εξόδου που περιγράφεται παραπάνω.
Επειδή η εκχώρηση τυπικής εισόδου ή τυπικής εξόδου ή και των δύο από τον σωλήνα λαμβάνει χώρα πριν από την ανακατεύθυνση, αυτή μπορεί να τροποποιηθεί από την ανακατεύθυνση. Για παράδειγμα:
$ εντολή1 2>&1 | εντολή2
στέλνει τόσο την τυπική έξοδο όσο και την τυπική έξοδο σφαλμάτων της εντολής1 στην τυπική είσοδο της εντολής2.
Ένας τερματιστής ; ή ⟨newline⟩ προκαλεί την εκτέλεση της προηγούμενης λίστας AND-OR (που περιγράφεται παρακάτω) διαδοχικά. ένα & προκαλεί ασύγχρονη εκτέλεση της προηγούμενης λίστας AND-OR.
Σημειώστε ότι, σε αντίθεση με ορισμένα άλλα κελύφη, κάθε διεργασία στον σωλήνα είναι παιδί του κελύφους που την καλεί (εκτός εάν είναι ενσωματωμένο στο κέλυφος, οπότε εκτελείται στο τρέχον κέλυφος – αλλά οποιαδήποτε επίδραση έχει στο περιβάλλον διαγράφεται).
Εντολές στο παρασκήνιο – &
Εάν μια εντολή τερματίζεται με τον τελεστή ελέγχου εμπούλου (&), το κέλυφος εκτελεί την εντολή ασύγχρονα – δηλαδή, το κέλυφος δεν περιμένει να ολοκληρωθεί η εντολή πριν εκτελέσει την επόμενη εντολή.
Η μορφή για την εκτέλεση μιας εντολής στο παρασκήνιο είναι:
command1 & [command2 & ...]
Εάν το shell δεν είναι διαδραστικό, η τυπική είσοδος μιας ασύγχρονης εντολής ορίζεται σε /dev/null.
Λίστες – Γενικά
Μια λίστα είναι μια ακολουθία μηδέν ή περισσότερων εντολών που διαχωρίζονται με νέες γραμμές, ερωτηματικά ή αμβερέ, και προαιρετικά τερματίζεται με ένα από αυτά τα τρία σύμβολα. Οι εντολές σε μια λίστα εκτελούνται με τη σειρά που γράφονται. Εάν μια εντολή ακολουθείται από ένα αμβερέ, το shell ξεκινά την εντολή και προχωρά αμέσως στην επόμενη εντολή. διαφορετικά, περιμένει να τερματιστεί η εντολή πριν προχωρήσει στην επόμενη.
Σύντομοι Τελεστές Λίστας
Οι "&&" και "||" είναι τελεστές λίστας AND-OR. Το "&&" εκτελεί την πρώτη εντολή και στη συνέχεια εκτελεί τη δεύτερη εντολή μόνο εάν η κατάσταση εξόδου της πρώτης εντολής είναι μηδέν. Το "||" είναι παρόμοιο, αλλά εκτελεί τη δεύτερη εντολή μόνο εάν η κατάσταση εξόδου της πρώτης εντολής είναι μη μηδενική. Τόσο οι "&&" όσο και οι "||" έχουν την ίδια προτεραιότητα.
Δομές Ελέγχου Ροής – if, while, for, case
Η σύνταξη της εντολής if είναι
if list
then list
[ elif list
then list ] ...
[ else list ]
fi
Η σύνταξη της εντολής while είναι
while list
do list
done
Οι δύο λίστες εκτελούνται επανειλημμένα όσο η κατάσταση εξόδου της πρώτης λίστας είναι μηδέν. Η εντολή until είναι παρόμοια, αλλά έχει τη λέξη until στη θέση του while, γεγονός που προκαλεί την επανάληψη έως ότου η κατάσταση εξόδου της πρώτης λίστας είναι μηδέν.
Η σύνταξη της εντολής for είναι
for variable [ in [ word ... ] ]
do list
done
Οι λέξεις που ακολουθούν το in επεκτείνονται και στη συνέχεια η λίστα εκτελείται επανειλημμένα με τη μεταβλητή να ορίζεται σε κάθε λέξη με τη σειρά. Η παράλειψη του in word ... είναι ισοδύναμη με το in "$@".
Η σύνταξη των εντολών break και continue είναι
break [ num ]
continue [ num ]
Η εντολή Break τερματίζει τους num πιο εσωτερικούς βρόχους for ή while. Η εντολή Continue συνεχίζει με την επόμενη επανάληψη του πιο εσωτερικού βρόχου. Αυτά υλοποιούνται ως ενσωματωμένες εντολές.
Η σύνταξη της εντολής case είναι
case word in
[(]pattern) list ;;
...
esac
Το pattern μπορεί στην πραγματικότητα να είναι ένα ή περισσότερα patterns (βλ. "Shell Patterns" που περιγράφονται παρακάτω), διαχωρισμένα με χαρακτήρες "|". Ο χαρακτήρας "(" πριν από το pattern είναι προαιρετικός.
Ομαδοποίηση Εντολών
Οι εντολές μπορούν να ομαδοποιηθούν γράφοντας είτε
(list)
ή
{ list; }
Η πρώτη από αυτές εκτελεί τις εντολές σε ένα υπο-shell. Οι ενσωματωμένες εντολές που ομαδοποιούνται σε ένα (list) δεν θα επηρεάσουν το τρέχον shell. Η δεύτερη μορφή δεν δημιουργεί ένα άλλο shell, επομένως είναι ελαφρώς πιο αποτελεσματική. Η ομαδοποίηση εντολών με αυτόν τον τρόπο σας επιτρέπει να ανακατευθύνετε την έξοδό τους σαν να ήταν ένα πρόγραμμα:
{ printf " hello " ; printf " world\n" ; } > greeting
Σημειώστε ότι το "}" πρέπει να ακολουθεί έναν τελεστή ελέγχου (εδώ, ";") ώστε να αναγνωρίζεται ως μια δεσμευμένη λέξη και όχι ως ένα άλλο όρισμα εντολής.
Συναρτήσεις
Η σύνταξη ενός ορισμού συνάρτησης είναι
name () command
Ένας ορισμός συνάρτησης είναι μια εκτελέσιμη δήλωση. όταν εκτελείται, εγκαθιστά μια συνάρτηση με όνομα name και επιστρέφει μια κατάσταση εξόδου μηδέν. Η εντολή είναι συνήθως μια λίστα που περικλείεται μεταξύ "{” και “}".
Οι μεταβλητές μπορούν να δηλωθούν ως τοπικές σε μια συνάρτηση χρησιμοποιώντας την εντολή local. Αυτή θα πρέπει να εμφανίζεται ως η πρώτη εντολή μιας συνάρτησης και η σύνταξη είναι:
local [μεταβλητή | -] ...
Η local υλοποιείται ως ενσωματωμένη εντολή.
Όταν μια μεταβλητή γίνει τοπική, κληρονομεί την αρχική τιμή και τις σημαίες exported και readonly από τη μεταβλητή με το ίδιο όνομα στην περιβάλλοντα εμβέλεια, εάν υπάρχει. Διαφορετικά, η μεταβλητή αρχικά είναι άδεια. Το shell χρησιμοποιεί δυναμική εμβέλεια, έτσι ώστε εάν κάνετε τη μεταβλητή x τοπική στη συνάρτηση f, η οποία στη συνέχεια καλεί τη συνάρτηση g, οι αναφορές στη μεταβλητή x που γίνονται μέσα στη g θα αναφέρονται στη μεταβλητή x που δηλώνεται μέσα στη f, και όχι στην καθολική μεταβλητή με όνομα x.
Η μόνη ειδική παράμετρος που μπορεί να γίνει τοπική είναι το “-”. Κάνοντας το “-” τοπικό, οποιεσδήποτε επιλογές του shell που αλλάζουν μέσω της εντολής set μέσα στη συνάρτηση θα επαναφερθούν στις αρχικές τους τιμές όταν η συνάρτηση επιστρέψει.
Η σύνταξη της εντολής return είναι:
return [κωδικός_εξόδου]
Τερματίζει την τρέχουσα συνάρτηση που εκτελείται. Η return υλοποιείται ως ενσωματωμένη εντολή.
Μεταβλητές και Παράμετροι
Το shell διατηρεί ένα σύνολο παραμέτρων. Μια παράμετρος που υποδεικνύεται με ένα όνομα ονομάζεται μεταβλητή. Όταν ξεκινά, το shell μετατρέπει όλες τις μεταβλητές περιβάλλοντος σε μεταβλητές του shell. Νέες μεταβλητές μπορούν να οριστούν χρησιμοποιώντας τη μορφή:
όνομα=τιμή
Οι μεταβλητές που ορίζονται από τον χρήστη πρέπει να έχουν ένα όνομα που αποτελείται αποκλειστικά από αλφαριθμητικούς χαρακτήρες και υπογράμμιση - ο πρώτος από τους οποίους δεν πρέπει να είναι αριθμητικός. Μια παράμετρος μπορεί επίσης να υποδεικνύεται με έναν αριθμό ή έναν ειδικό χαρακτήρα όπως εξηγείται παρακάτω.
Θέσιες Παράμετροι
Μια θέσια παράμετρος είναι μια παράμετρος που υποδεικνύεται με έναν αριθμό (n > 0). Το shell τις ορίζει αρχικά στις τιμές των ορισμάτων της γραμμής εντολών που ακολουθούν το όνομα του script του shell. Η ενσωματωμένη εντολή set μπορεί επίσης να χρησιμοποιηθεί για να τις ορίσει ή να τις επαναφέρει.
Ειδικές Παράμετροι
Μια ειδική παράμετρος είναι μια παράμετρος που υποδεικνύεται με έναν από τους παρακάτω ειδικούς χαρακτήρες. Η τιμή της παραμέτρου αναφέρεται δίπλα στον χαρακτήρα της.
* Διευρύνεται στις θέσιες παραμέτρους, ξεκινώντας από το ένα. Όταν η διεύρυνση εμφανίζεται μέσα σε μια συμβολοσειρά με διπλά εισαγωγικά, διευρύνεται σε ένα μόνο πεδίο με την τιμή κάθε παραμέτρου διαχωρισμένη με τον πρώτο χαρακτήρα της μεταβλητής `IFS`, ή με ένα κενό ⟨space⟩ εάν το `IFS` δεν έχει οριστεί.
@ Διευρύνεται στις θέσιες παραμέτρους, ξεκινώντας από το ένα. Όταν η διεύρυνση εμφανίζεται μέσα σε διπλά εισαγωγικά, κάθε θέσια παράμετρος διευρύνεται ως ένα ξεχωριστό όρισμα. Εάν δεν υπάρχουν θέσιες παράμετροι, η διεύρυνση του `@` δημιουργεί μηδενικά ορίσματα, ακόμη και όταν το `@` είναι σε διπλά εισαγωγικά. Αυτό σημαίνει, για παράδειγμα, εάν το `$1` είναι `"abc"` και το `$2` είναι `"def ghi"`, τότε το `"$@"` διευρύνεται στα δύο ορίσματα:
"abc" "def ghi"
Διευρύνεται στον αριθμό των θέσιων παραμέτρων.
? Επεκτείνεται στην κατάσταση εξόδου της πιο πρόσφατης διοχέτευσης.
- (Δεύτερον.) Επεκτείνεται στις τρέχουσες σημαίες επιλογών (τα ονόματα των επιλογών ενός μόνο χαρακτήρα που συνενώνονται σε μια συμβολοσειρά) όπως καθορίζονται κατά την κλήση, από την εντολή `set` ή έμμεσα από το κέλυφος.
$ Επεκτείνεται στο αναγνωριστικό διεργασίας του κλήσης κελύφους. Ένα υποκέλυφος διατηρεί την ίδια τιμή του $ όπως και ο γονέας του.
! Επεκτείνεται στο αναγνωριστικό διεργασίας της πιο πρόσφατης εντολής φόντου που εκτελέστηκε από το τρέχον κέλυφος. Για μια διοχέτευση, το αναγνωριστικό διεργασίας είναι αυτό της τελευταίας εντολής στη διοχέτευση.
0 (Μηδέν.) Επεκτείνεται στο όνομα του κελύφους ή του σεναρίου κελύφους.
Επεκτάσεις Λέξεων
Αυτή η παράγραφος περιγράφει τις διάφορες επεκτάσεις που εκτελούνται σε λέξεις. Δεν εκτελούνται όλες οι επεκτάσεις σε κάθε λέξη, όπως εξηγείται παρακάτω.
Οι επεκτάσεις tilde, οι επεκτάσεις παραμέτρων, οι αντικαταστάσεις εντολών, οι αριθμητικές επεκτάσεις και η αφαίρεση εισαγωγικών που συμβαίνουν μέσα σε μια ενιαία λέξη, επεκτείνονται σε ένα μόνο πεδίο. Μόνο η διαίρεση πεδίου ή η επέκταση διαδρομής μπορεί να δημιουργήσει πολλά πεδία από μια μόνο λέξη. Η μόνη εξαίρεση σε αυτόν τον κανόνα είναι η επέκταση της ειδικής παραμέτρου @ μέσα σε διπλά εισαγωγικά, όπως περιγράφηκε παραπάνω.
Η σειρά επέκτασης λέξεων είναι:
Επέκταση Tilde, Επέκταση Παραμέτρων, Αντικατάσταση Εντολών, Αριθμητική Επέκταση (όλα αυτά συμβαίνουν ταυτόχρονα).
Η διαίρεση πεδίου εκτελείται στα πεδία που δημιουργούνται από το βήμα (1), εκτός εάν η μεταβλητή IFS είναι μηδενική.
Επέκταση Διαδρομής (εκτός εάν είναι ενεργή η ρύθμιση `-f`).
Αφαίρεση Εισαγωγικών.
Ο χαρακτήρας $ χρησιμοποιείται για να εισαγάγει την επέκταση παραμέτρων, την αντικατάσταση εντολών ή την αριθμητική αξιολόγηση.
Επέκταση Tilde (αντικατάσταση του καταλόγου αρχικής σελίδας ενός χρήστη)
Μια λέξη που ξεκινά με έναν μη οριοθετημένο χαρακτήρα tilde (~) υπόκειται σε επέκταση tilde. Όλοι οι χαρακτήρες μέχρι μια κάθετο (/) ή το τέλος της λέξης αντιμετωπίζονται ως όνομα χρήστη και αντικαθίστανται με τον κατάλογο αρχικής σελίδας του χρήστη. Εάν λείπει το όνομα χρήστη (όπως στο ~/foobar), η tilde αντικαθίσταται με την τιμή της μεταβλητής HOME (ο κατάλογος αρχικής σελίδας του τρέχοντος χρήστη).
Επέκταση Παραμέτρων
Η μορφή για την επέκταση παραμέτρων έχει ως εξής:
${έκφραση}
όπου η έκφραση αποτελείται από όλους τους χαρακτήρες μέχρι την αντίστοιχη "}". Οποιαδήποτε "}" που διαφεύγει με μια κάθετο ή μέσα σε μια οριοθετημένη συμβολοσειρά, και χαρακτήρες σε ενσωματωμένες αριθμητικές επεκτάσεις, αντικαταστάσεις εντολών και επεκτάσεις μεταβλητών, δεν εξετάζονται κατά τον προσδιορισμό της αντίστοιχης "}".
Η απλούστερη μορφή για την επέκταση παραμέτρων είναι:
${παράμετρος}
Η τιμή, εάν υπάρχει, της παραμέτρου αντικαθίσταται.
Το όνομα ή το σύμβολο της παραμέτρου μπορεί να περικλείεται σε άγκιστρα, τα οποία είναι προαιρετικά, εκτός από τις παραμέτρους θέσης με περισσότερο από ένα ψηφίο ή όταν η παράμετρος ακολουθείται από έναν χαρακτήρα που θα μπορούσε να ερμηνευτεί ως μέρος του ονόματος. Εάν μια επέκταση παραμέτρων συμβαίνει μέσα σε διπλά εισαγωγικά:
Η επέκταση διαδρομής δεν εκτελείται στα αποτελέσματα της επέκτασης.
Η διαίρεση πεδίων δεν εκτελείται στα αποτελέσματα της επέκτασης, με εξαίρεση το @.
Επιπλέον, μια επέκταση παραμέτρου μπορεί να τροποποιηθεί χρησιμοποιώντας μία από τις ακόλουθες μορφές.
${parameter:-word} Χρήση προεπιλεγμένων τιμών. Εάν η παράμετρος δεν έχει οριστεί ή είναι κενή, τότε αντικαθίσταται η επέκταση του word. διαφορετικά, αντικαθίσταται η τιμή της παραμέτρου.
${parameter:=word} Ανάθεση προεπιλεγμένων τιμών. Εάν η παράμετρος δεν έχει οριστεί ή είναι κενή, τότε η επέκταση του word ανατίθεται στην παράμετρο. Σε κάθε περίπτωση, η τελική τιμή της παραμέτρου αντικαθίσταται. Μόνο μεταβλητές, όχι θέσεις παραμέτρων ή ειδικές παράμετροι, μπορούν να ανατεθούν με αυτόν τον τρόπο.
${parameter:?[word]} Υπόδειξη σφάλματος εάν είναι κενή ή δεν έχει οριστεί. Εάν η παράμετρος δεν έχει οριστεί ή είναι κενή, τότε η επέκταση του word (ή ένα μήνυμα που υποδεικνύει ότι δεν έχει οριστεί εάν το word παραλειφθεί) γράφεται στην τυπική έξοδο και το κέλυφος τερματίζει με μη μηδενικό κώδικα εξόδου. Διαφορετικά, η τιμή της παραμέτρου αντικαθίσταται. Ένα διαδραστικό κέλυφος δεν χρειάζεται να τερματίσει.
${parameter:+word} Χρήση εναλλακτικής τιμής. Εάν η παράμετρος δεν έχει οριστεί ή είναι κενή, αντικαθίσταται η κενή τιμή. διαφορετικά, αντικαθίσταται η επέκταση του word.
Στις επεκτάσεις παραμέτρων που παρουσιάζονται προηγουμένως, η χρήση της άνω τελείας στη μορφή έχει ως αποτέλεσμα έναν έλεγχο για μια παράμετρο που δεν έχει οριστεί ή είναι κενή. η παράλειψη της άνω τελείας έχει ως αποτέλεσμα έναν έλεγχο για μια παράμετρο που δεν έχει απλώς οριστεί.
${#parameter} Μήκος συμβολοσειράς. Το μήκος σε χαρακτήρες της τιμής της παραμέτρου.
Οι ακόλουθες τέσσερις ποικιλίες επέκτασης παραμέτρων παρέχουν δυνατότητες επεξεργασίας υποσυμβολοσειρών. Σε κάθε περίπτωση, χρησιμοποιείται η σημειογραφία αντιστοίχισης προτύπων (βλ. "Πρότυπα κελύφους"), και όχι η σημειογραφία κανονικών εκφράσεων, για την αξιολόγηση των προτύπων. Εάν η παράμετρος είναι * ή @, το αποτέλεσμα της επέκτασης δεν καθορίζεται. Η περικλειόμενη ολόκληρη η συμβολοσειρά επέκτασης παραμέτρου σε διπλά εισαγωγικά δεν έχει ως αποτέλεσμα τα ακόλουθα τέσσερα είδη χαρακτήρων προτύπου να εισαχθούν, ενώ η εισαγωγή χαρακτήρων μέσα στις αγκύλες έχει αυτό το αποτέλεσμα.
${parameter%word} Αφαίρεση του μικρότερου υπολοίπου προτύπου. Το word επεκτείνεται για να δημιουργηθεί ένα πρότυπο. Η επέκταση παραμέτρου έχει στη συνέχεια ως αποτέλεσμα την παράμετρο, με το μικρότερο τμήμα του υπολοίπου που αντιστοιχεί στο πρότυπο να διαγράφεται.
${parameter%%word} Αφαίρεση του μεγαλύτερου υπολοίπου προτύπου. Το word επεκτείνεται για να δημιουργηθεί ένα πρότυπο. Η επέκταση παραμέτρου έχει στη συνέχεια ως αποτέλεσμα την παράμετρο, με το μεγαλύτερο τμήμα του υπολοίπου που αντιστοιχεί στο πρότυπο να διαγράφεται.
${parameter#word} Αφαίρεση του μικρότερου προθέματος προτύπου. Το word επεκτείνεται για να δημιουργηθεί ένα πρότυπο. Η επέκταση παραμέτρου έχει στη συνέχεια ως αποτέλεσμα την παράμετρο, με το μικρότερο τμήμα του προθέματος που αντιστοιχεί στο πρότυπο να διαγράφεται.
${parameter##word} Αφαίρεση του μεγαλύτερου προθέματος προτύπου. Το word επεκτείνεται για να δημιουργηθεί ένα πρότυπο. Η επέκταση παραμέτρου έχει στη συνέχεια ως αποτέλεσμα την παράμετρο, με το μεγαλύτερο τμήμα του προθέματος που αντιστοιχεί στο πρότυπο να διαγράφεται.
Αντικατάσταση εντολών
Η αντικατάσταση εντολών επιτρέπει την αντικατάσταση της εξόδου μιας εντολής στη θέση του ίδιου του ονόματος της εντολής. Η αντικατάσταση εντολών συμβαίνει όταν η εντολή περικλείεται ως εξής:
$(command)
ή («με εισαγωγικά πίσω-στροφής»):
`command`
Το shell επεκτείνει την αντικατάσταση εντολής εκτελώντας την εντολή σε ένα υπο-περιβάλλον και αντικαθιστά την αντικατάσταση εντολής με την τυπική έξοδο της εντολής, αφαιρώντας ακολουθίες μίας ή περισσότερων νέων γραμμών στο τέλος της αντικατάστασης. (Οι ενσωματωμένες νέες γραμμές πριν από το τέλος της εξόδου δεν αφαιρούνται· ωστόσο, κατά τη διάρκεια της διαίρεσης πεδίων, ενδέχεται να μετατραπούν σε κενά, ανάλογα με την τιμή του IFS και τα εισαγωγικά που ισχύουν.)
Αριθμητική επέκταση
Η αριθμητική επέκταση παρέχει έναν μηχανισμό για την αξιολόγηση μιας αριθμητικής έκφρασης και την αντικατάσταση της τιμής της. Η μορφή για την αριθμητική επέκταση είναι η εξής:
$((expression))
Η έκφραση αντιμετωπίζεται σαν να ήταν σε διπλά εισαγωγικά, εκτός από το ότι τα διπλά εισαγωγικά μέσα στην έκφραση δεν αντιμετωπίζονται ειδικά. Το shell επεκτείνει όλα τα σύμβολα στην έκφραση για επέκταση παραμέτρων, αντικατάσταση εντολών και αφαίρεση εισαγωγικών.
Στη συνέχεια, το shell αντιμετωπίζει αυτό ως μια αριθμητική έκφραση και αντικαθιστά την τιμή της έκφρασης.
Διαχωρισμός λευκού διαστήματος (Διαχωρισμός πεδίων)
Μετά την επέκταση παραμέτρων, την αντικατάσταση εντολών και την αριθμητική επέκταση, το shell σαρώνει τα αποτελέσματα των επεκτάσεων και των αντικαταστάσεων που δεν πραγματοποιήθηκαν σε διπλά εισαγωγικά για διαχωρισμό πεδίων και μπορούν να προκύψουν πολλαπλά πεδία.
Το shell αντιμετωπίζει κάθε χαρακτήρα του IFS ως διαχωριστικό και χρησιμοποιεί τα διαχωριστικά για να χωρίσει
τα αποτελέσματα της επέκτασης παραμέτρων και της αντικατάστασης εντολών σε πεδία.
Επέκταση ονομάτων αρχείων (Δημιουργία ονομάτων αρχείων)
Εκτός εάν έχει οριστεί η σημαία -f, η δημιουργία ονομάτων αρχείων πραγματοποιείται αφού ολοκληρωθεί ο διαχωρισμός λέξεων. Κάθε λέξη θεωρείται ως μια σειρά προτύπων, διαχωρισμένων με κάθετες. Η διαδικασία επέκτασης αντικαθιστά τη λέξη με τα ονόματα όλων των υπαρχόντων αρχείων των οποίων τα ονόματα μπορούν να σχηματιστούν αντικαθιστώντας κάθε πρότυπο με μια συμβολοσειρά που ταιριάζει με το καθορισμένο πρότυπο. Υπάρχουν δύο περιορισμοί σε αυτό: πρώτον, ένα πρότυπο δεν μπορεί να ταιριάζει με μια συμβολοσειρά που περιέχει μια κάθετο και, δεύτερον, ένα πρότυπο δεν μπορεί να ταιριάζει με μια συμβολοσειρά που ξεκινά με μια τελεία, εκτός εάν ο πρώτος χαρακτήρας του προτύπου είναι μια τελεία. Η επόμενη ενότητα περιγράφει τα πρότυπα που χρησιμοποιούνται τόσο για την επέκταση ονομάτων αρχείων όσο και για την εντολή case.
Πρότυπα Shell
Ένα πρότυπο αποτελείται από κανονικούς χαρακτήρες, οι οποίοι ταιριάζουν με τον εαυτό τους, και μετα-χαρακτήρες. Οι μετα-χαρακτήρες είναι οι «!», «*», «?», και «[». Αυτοί οι χαρακτήρες χάνουν τις ειδικές τους σημασίες εάν είναι
με εισαγωγικά. Όταν εκτελείται η αντικατάσταση εντολής ή μεταβλητής και το σύμβολο του δολαρίου ή τα εισαγωγικά πίσω-στροφής
δεν έχουν εισαγωγικά, η τιμή της μεταβλητής ή η έξοδος της εντολής σαρώνεται για αυτούς τους χαρακτήρες και μετατρέπονται σε μετα-χαρακτήρες.
Ένας αστερίσκος («*») ταιριάζει με οποιαδήποτε συμβολοσειρά χαρακτήρων. Ένα ερωτηματικό ταιριάζει με οποιονδήποτε μεμονωμένο χαρακτήρα. Ένα αριστερό άγκιστρο («[») εισάγει μια κατηγορία χαρακτήρων. Το τέλος της κατηγορίας χαρακτήρων υποδεικνύεται από ένα («]»)· εάν λείπει το «]», τότε το «[» ταιριάζει με ένα «[» αντί να εισάγει μια κατηγορία χαρακτήρων. Μια κατηγορία χαρακτήρων ταιριάζει με οποιονδήποτε από τους χαρακτήρες μεταξύ των αγκύλων. Μπορεί να καθοριστεί μια σειρά χαρακτήρων χρησιμοποιώντας μια κάθετο. Η κατηγορία χαρακτήρων μπορεί να συμπληρωθεί κάνοντας ένα θαυμαστικό τον πρώτο χαρακτήρα της κατηγορίας χαρακτήρων.
Για να συμπεριλάβετε ένα «]» σε μια κλάση χαρακτήρων, κάντε το τον πρώτο χαρακτήρα που αναφέρεται (μετά το «!», εάν υπάρχει). Για να συμπεριλάβετε μια κάθετο, κάντε το τον πρώτο ή τον τελευταίο χαρακτήρα που αναφέρεται.
Ενσωματωμένες εντολές
Αυτή η ενότητα καταγράφει τις ενσωματωμένες εντολές, οι οποίες είναι ενσωματωμένες επειδή πρέπει να εκτελέσουν κάποια λειτουργία που δεν μπορεί να εκτελεστεί από μια ξεχωριστή διαδικασία. Επιπλέον, υπάρχουν αρκετές άλλες εντολές που μπορεί να είναι ενσωματωμένες για λόγους απόδοσης (π.χ. printf(1), echo(1), test(1), κ.λπ.).
:
true Μια άδεια εντολή που επιστρέφει μια τιμή εξόδου 0 (true).
false Μια άδεια εντολή που επιστρέφει μια τιμή εξόδου 1 (false).
. file
Οι εντολές στο καθορισμένο αρχείο διαβάζονται και εκτελούνται από το κέλυφος.
alias [όνομα[=αλφαριθμητικό ...]]
Εάν καθοριστεί το όνομα=αλφαριθμητικό, το κέλυφος ορίζει την συντόμευση όνομα με την τιμή αλφαριθμητικό. Εάν καθοριστεί μόνο το όνομα, εκτυπώνεται η τιμή της συντόμευσης όνομα. Χωρίς ορίσματα, η ενσωματωμένη εντολή alias εκτυπώνει τα ονόματα και τις τιμές όλων των ορισμένων συντομεύσεων (δείτε την εντολή unalias).
bg [εργασία] ...
Συνεχίζει τις καθορισμένες εργασίες (ή την τρέχουσα εργασία εάν δεν έχουν καθοριστεί εργασίες) στο παρασκήνιο.
command [-p] [-v] [-V] εντολή [όρισμα ...]
Εκτελεί την καθορισμένη εντολή, αλλά αγνοεί τις συναρτήσεις του κελύφους κατά την αναζήτησή της. (Αυτό είναι χρήσιμο όταν έχετε μια συνάρτηση κελύφους με το ίδιο όνομα με μια ενσωματωμένη εντολή.)
-p αναζητά την εντολή χρησιμοποιώντας ένα PATH που εγγυάται την εύρεση όλων των τυπικών βοηθητικών προγραμμάτων.
-V Μην εκτελέσετε την εντολή, αλλά αναζητήστε την εντολή και εκτυπώστε την ανάλυση της αναζήτησης της εντολής. Αυτό είναι το ίδιο με την ενσωματωμένη εντολή type.
-v Μην εκτελέσετε την εντολή, αλλά αναζητήστε την εντολή και εκτυπώστε την απόλυτη διαδρομή των βοηθητικών προγραμμάτων, το όνομα για τις ενσωματωμένες εντολές ή την επέκταση των συντομεύσεων.
cd|chdir cd|chdir [-LP] [κατάλογος]
Αλλάζει στον καθορισμένο κατάλογο (προεπιλογή HOME). Εάν υπάρχει μια καταχώρηση για το CDPATH στο περιβάλλον της εντολής cd ή η μεταβλητή κελύφους CDPATH έχει οριστεί και το όνομα του καταλόγου δεν ξεκινά με μια κάθετο, τότε οι κατάλογοι που αναφέρονται στο CDPATH θα αναζητηθούν για τον καθορισμένο κατάλογο. Η μορφή του CDPATH είναι η ίδια με αυτή του PATH. Εάν καθοριστεί μια απλή κάθετος ως όρισμα, θα αντικατασταθεί από την τιμή του OLDPWD. Η εντολή cd θα εκτυπώσει το όνομα του καταλόγου στον οποίο άλλαξε πραγματικά, εάν αυτό διαφέρει από το όνομα που έδωσε ο χρήστης. Αυτά μπορεί να διαφέρουν είτε επειδή χρησιμοποιήθηκε ο μηχανισμός CDPATH είτε επειδή το όρισμα είναι μια απλή κάθετος. Η επιλογή -P προκαλεί τη χρήση της φυσικής δομής καταλόγων, δηλαδή, όλες οι συμβολικές συνδέσεις επιλύονται στις αντίστοιχες τιμές τους. Η επιλογή -L απενεργοποιεί την επίδραση τυχόν προηγούμενων επιλογών -P.
echo [-n] arguments...
Εκτυπώνει τα ορίσματα στην τυπική έξοδο, χωρισμένα με κενά διαστήματα. Εκτός εάν υπάρχει η επιλογή -n, εκτυπώνεται μια νέα γραμμή μετά τα ορίσματα.
Εάν κατά τη διάρκεια της εξόδου συναντηθεί οποιαδήποτε από τις ακόλουθες ακολουθίες χαρακτήρων, η ακολουθία δεν εκτυπώνεται. Αντ' αυτού, εκτελείται η καθορισμένη ενέργεια:
\b Εκτυπώνει έναν χαρακτήρα οπισθοδρόμησης.
\c Η επόμενη έξοδος καταστέλλεται. Αυτό χρησιμοποιείται συνήθως στο τέλος του τελευταίου ορίσματος για να καταστείλει την τελική νέα γραμμή που θα εξέδιδε διαφορετικά η εντολή echo.
\e Εξάγει έναν χαρακτήρα διαφυγής (ESC).
\f Εξάγει μια τροφοδοσία σελίδας.
\n Εξάγει έναν χαρακτήρα νέας γραμμής.
\r Εξάγει μια επιστροφή φορέα.
\t Εξάγει μια (οριζόντια) καρτέλα.
\v Εξάγει μια κάθετη καρτέλα.
\0ψηφία
Εξάγει τον χαρακτήρα του οποίου η τιμή δίνεται από μηδέν έως τρία οκταδικά ψηφία. Εάν δεν υπάρχουν ψηφία, εξάγεται ένας χαρακτήρας μηδενικού.
\\ Εξάγει μια κάθετο.
Όλες οι άλλες ακολουθίες με κάθετο προκαλούν απροσδιόριστη συμπεριφορά.
eval string ...
Συνενώνει όλα τα ορίσματα με κενά διαστήματα. Στη συνέχεια, αναλύει και εκτελεί ξανά την εντολή.
exec [command arg ...]
Εκτός εάν καθοριστεί η εντολή, η διαδικασία του shell αντικαθίσταται από το καθορισμένο πρόγραμμα (το οποίο πρέπει να είναι ένα πραγματικό πρόγραμμα, όχι μια ενσωματωμένη εντολή ή μια συνάρτηση του shell). Οποιεσδήποτε ανακατευθύνσεις στην εντολή exec επισημαίνονται ως μόνιμες, ώστε να μην αναιρούνται όταν ολοκληρωθεί η εντολή exec.
exit [exitstatus]
Τερματίζει τη διαδικασία του shell. Εάν δοθεί η τιμή exitstatus, χρησιμοποιείται ως η τιμή εξόδου του shell. διαφορετικά, χρησιμοποιείται η τιμή εξόδου της προηγούμενης εντολής.
export name ...
export -p
Τα καθορισμένα ονόματα εξάγονται έτσι ώστε να εμφανίζονται στο περιβάλλον των επακόλουθων εντολών. Ο μόνος τρόπος για να αφαιρεθεί μια μεταβλητή από την εξαγωγή είναι να την καταργήσετε. Το shell επιτρέπει στην τιμή μιας μεταβλητής να οριστεί ταυτόχρονα με την εξαγωγή της, γράφοντας
export name=value
Χωρίς ορίσματα, η εντολή export εμφανίζει τα ονόματα όλων των εξαγόμενων μεταβλητών. Με την επιλογή -p, η έξοδος θα μορφοποιηθεί κατάλληλα για μη διαδραστική χρήση.
fc [-e editor] [first [last]]
fc -l [-nr] [first [last]]
fc -s [old=new] [first]
Η ενσωματωμένη εντολή fc απαριθμεί, επεξεργάζεται και εκτελεί ξανά εντολές που έχουν εισαχθεί προηγουμένως σε ένα διαδραστικό shell.
-e editor
Χρησιμοποιήστε τον επεξεργαστή που καθορίζεται από την εντολή editor για να επεξεργαστείτε τις εντολές. Η συμβολοσειρά του επεξεργαστή είναι ένα όνομα εντολής, το οποίο υπόκειται σε αναζήτηση μέσω της μεταβλητής PATH. Η τιμή στην μεταβλητή FCEDIT χρησιμοποιείται ως προεπιλογή όταν δεν καθορίζεται η παράμετρος -e. Εάν η FCEDIT είναι κενή ή μη καθορισμένη, η τιμή της μεταβλητής EDITOR χρησιμοποιείται. Εάν η EDITOR είναι κενή ή μη καθορισμένη, χρησιμοποιείται το ed(1) ως επεξεργαστής.
-l (ell)
Απαριθμήστε τις εντολές αντί να καλέσετε έναν επεξεργαστή. Οι εντολές γράφονται στην ακολουθία που υποδεικνύεται από τις παραμέτρους first και last, όπως επηρεάζονται από την παράμετρο -r, με κάθε εντολή να προηγείται από τον αριθμό εντολής.
-n Καταστολή των αριθμών εντολών κατά την εμφάνιση με την επιλογή -l.
-r Αντιστροφή της σειράς των εντολών που εμφανίζονται (με την επιλογή -l) ή επεξεργάζονται (χωρίς τις επιλογές -l ή -s).
-s Επαναεκτέλεση της εντολής χωρίς την επίκληση ενός επεξεργαστή.
first
last Επιλογή των εντολών που θα εμφανιστούν ή θα επεξεργαστούν. Ο αριθμός των προηγούμενων εντολών στις οποίες μπορεί να γίνει πρόσβαση καθορίζεται από την τιμή της μεταβλητής HISTSIZE. Η τιμή των first ή last ή και των δύο είναι μία από τις ακόλουθες:
[+]αριθμός
Ένας θετικός αριθμός που αντιπροσωπεύει έναν αριθμό εντολής. Οι αριθμοί εντολών μπορούν να εμφανιστούν με την επιλογή -l.
-αριθμός
Ένας αρνητικός δεκαδικός αριθμός που αντιπροσωπεύει την εντολή που εκτελέστηκε πριν από έναν αριθμό εντολών. Για παράδειγμα, το -1 είναι η αμέσως προηγούμενη εντολή.
συμβολοσειρά
Μια συμβολοσειρά που υποδεικνύει την πιο πρόσφατα εισαχθείσα εντολή που ξεκινά με αυτήν τη συμβολοσειρά. Εάν η παράμετρος old=new δεν καθορίζεται επίσης με την επιλογή -s, η συμβολοσειρακή μορφή της παραμέτρου first δεν μπορεί να περιέχει έναν ενσωματωμένο χαρακτήρα ίσο.
Οι ακόλουθες μεταβλητές περιβάλλοντος επηρεάζουν την εκτέλεση της εντολής fc:
FCEDIT Όνομα του επεξεργαστή που θα χρησιμοποιηθεί.
HISTSIZE Ο αριθμός των προηγούμενων εντολών στις οποίες μπορεί να γίνει πρόσβαση.
fg [εργασία]
Μετακινήστε την καθορισμένη εργασία ή την τρέχουσα εργασία στο προσκήνιο.
getopts optstring var [arg ...]
Η εντολή POSIX getopts, η οποία δεν πρέπει να συγχέεται με το βοηθητικό πρόγραμμα Bell Labs-derived getopt(1).
Το πρώτο όρισμα θα πρέπει να είναι μια σειρά από γράμματα, καθένα από τα οποία μπορεί να ακολουθείται προαιρετικά από άνω και κάτω τελεία για να υποδείξει ότι η επιλογή απαιτεί ένα όρισμα. Η μεταβλητή που καθορίζεται ορίζεται στην ανάλυση της επιλογής.
Η εντολή getopts αντικαθιστά το παλαιότερο βοηθητικό πρόγραμμα getopt(1) λόγω της διαχείρισης των ορισμάτων που περιέχουν κενά.
Το ενσωματωμένο getopts μπορεί να χρησιμοποιηθεί για την απόκτηση επιλογών και των ορισμάτων τους από μια λίστα παραμέτρων. Όταν καλείται, το getopts τοποθετεί την τιμή της επόμενης επιλογής από τη συμβολοσειρά επιλογών στη λίστα στη μεταβλητή του κελύφους που καθορίζεται από την παράμετρο var και τον δείκτη της στη μεταβλητή του κελύφους OPTIND. Όταν καλείται το κέλυφος, η παράμετρος OPTIND αρχικοποιείται στο 1. Για κάθε επιλογή που απαιτεί ένα όρισμα, το ενσωματωμένο getopts θα τοποθετεί το όρισμα στη μεταβλητή του κελύφους OPTARG. Εάν μια επιλογή δεν επιτρέπεται στη συμβολοσειρά optstring, τότε η παράμετρος OPTARG θα καταργηθεί.
Από προεπιλογή, οι μεταβλητές $1, ..., $n επιθεωρούνται. εάν καθοριστούν ορίσματα, θα αναλυθούν αυτά.
Η παράμετρος optstring είναι μια συμβολοσειρά αναγνωρισμένων χαρακτήρων επιλογών (δείτε getopt(3)). Εάν ένας χαρακτήρας ακολουθείται από άνω και κάτω τελεία, η επιλογή αναμένεται να έχει ένα όρισμα, το οποίο μπορεί ή όχι να διαχωρίζεται από αυτό με κενό διάστημα. Εάν ένας χαρακτήρας επιλογής δεν βρεθεί όπου αναμένεται, το getopts θα ορίσει τη μεταβλητή var σε «;». Στη συνέχεια, το getopts θα καταργήσει την παράμετρο OPTARG και θα γράψει στην τυπική έξοδο. Καθορίζοντας άνω και κάτω τελεία ως τον πρώτο χαρακτήρα της συμβολοσειράς optstring, όλα τα σφάλματα θα αγνοηθούν.
Μετά την τελευταία επιλογή, το getopts θα επιστρέψει μια μη μηδενική τιμή και θα ορίσει την παράμετρο var σε «;».
Το ακόλουθο απόσπασμα κώδικα δείχνει πώς μπορεί να επεξεργαστεί κάποιος τα ορίσματα για μια εντολή που μπορεί να λαμβάνει τις επιλογές [a] και [b] και την επιλογή [c], η οποία απαιτεί ένα όρισμα.
while getopts abc: f
do
case $f in
a | b) flag=$f;;
c) carg=$OPTARG;;
\?) echo $USAGE; exit 1;;
esac
done
shift $((OPTIND - 1))
Αυτός ο κώδικας θα αποδεχτεί οποιοδήποτε από τα παρακάτω ως ισοδύναμο:
cmd -acarg file file
cmd -a -c arg file file
cmd -carg -a file file
cmd -a -carg -- file file
hash [εντολή ...]
hash -r
Το κέλυφος διατηρεί έναν πίνακα κατακερματισμού που θυμάται τις θέσεις των εντολών. Χωρίς κανένα όρισμα, η εντολή hash εκτυπώνει το περιεχόμενο αυτού του πίνακα. Οι εγγραφές που δεν έχουν ελεγχθεί από την τελευταία εντολή cd επισημαίνονται με ένα αστέρισκο. Είναι πιθανό αυτές οι εγγραφές να είναι άκυρες.
Με ορίσματα, η εντολή hash αφαιρεί τις καθορισμένες εντολές από τον πίνακα κατακερματισμού (εκτός εάν είναι συναρτήσεις) και στη συνέχεια τις εντοπίζει. Η επιλογή -r προκαλεί την αφαίρεση όλων των εγγραφών στον πίνακα κατακερματισμού, εκτός από τις συναρτήσεις.
jobs [-lp] [εργασία ...]
Εμφανίζει την κατάσταση όλων ή μόνο των καθορισμένων εργασιών: Από προεπιλογή, εμφανίζει τον αριθμό εργασίας, την κατάσταση (θετικό ή αρνητικό), εάν υπάρχει, την κατάσταση εργασίας και την εντολή του κελύφους. -l Εμφανίζει επίσης το PID του κύριου μέλους της ομάδας και μόνο το PID και τις εντολές κελύφους των άλλων μελών της εργασίας. -p Εμφανίζει μόνο τα PID των κύριων μελών, ένα ανά γραμμή.
kill [-s sigspec | -signum | -sigspec] [pid | εργασία ...]
Ισοδύναμο με kill(1), αλλά μπορεί επίσης να καθοριστεί μια εργασία. Τα σήματα μπορούν να είναι είτε ονόματα χωρίς το πρόθεμα SIG είτε δεκαδικοί αριθμοί. Η προεπιλογή είναι το TERM.
kill -l [signum | exitstatus]
Εμφανίζει τις διαθέσιμες ονομασίες σημάτων χωρίς το πρόθεμα SIG. Εάν καθοριστεί το sigspec, εμφανίζει μόνο το sigspec για αυτό το σήμα. Εάν καθοριστεί το exitstatus (> 128), εμφανίζει μόνο το sigspec που το προκάλεσε.
pwd [-LP]
Η ενσωματωμένη εντολή θυμάται ποιος είναι ο τρέχων κατάλογος και δεν τον υπολογίζει ξανά κάθε φορά. Αυτό το καθιστά πιο γρήγορο. Ωστόσο, εάν ο τρέχων κατάλογος μετονομαστεί, η ενσωματωμένη έκδοση της εντολής pwd θα συνεχίσει να εκτυπώνει το παλιό όνομα του καταλόγου. Η επιλογή -P προκαλεί την εμφάνιση της φυσικής τιμής του τρέχοντος καταλόγου εργασίας, δηλαδή, όλες οι συμβολικές συνδέσεις επιλύονται στις αντίστοιχες τιμές τους. Η επιλογή -L απενεργοποιεί την επίδραση οποιωνδήποτε προηγούμενων επιλογών -P.
read [-p μήνυμα] [-r] μεταβλητή [...]
Το μήνυμα εκτυπώνεται εάν καθοριστεί η επιλογή -p και η τυπική είσοδος είναι ένα τερματικό. Στη συνέχεια, διαβάζεται μια γραμμή από την τυπική είσοδο. Η τελευταία νέα γραμμή διαγράφεται από τη γραμμή και η γραμμή χωρίζεται, όπως περιγράφεται στην ενότητα σχετικά με τον διαχωρισμό λέξεων, και τα τμήματα εκχωρούνται στις μεταβλητές με τη σειρά. Πρέπει να καθοριστεί τουλάχιστον μία μεταβλητή. Εάν υπάρχουν περισσότερα τμήματα από μεταβλητές, τα υπόλοιπα τμήματα (μαζί με τους χαρακτήρες στο IFS που τα διαχώρισαν) εκχωρούνται στην τελευταία μεταβλητή. Εάν υπάρχουν περισσότερες μεταβλητές από τμήματα, στις υπόλοιπες μεταβλητές εκχωρείται η κενή συμβολοσειρά. Η ενσωματωμένη εντολή read θα υποδείξει επιτυχία, εκτός εάν συναντηθεί EOF στην είσοδο, οπότε και θα επιστραφεί αποτυχία.
Από προεπιλογή, εκτός εάν καθοριστεί η επιλογή -r, η ανάστροφη κάθετος “\” λειτουργεί ως χαρακτήρας απόδρασης, προκαλώντας την κυριολεκτική μεταχείριση του επόμενου χαρακτήρα. Εάν μια ανάστροφη κάθετος ακολουθείται από μια νέα γραμμή, η ανάστροφη κάθετος και η νέα γραμμή θα διαγραφούν.
readonly name ...
readonly -p
Τα καθορισμένα ονόματα επισημαίνονται ως μόνο για ανάγνωση, έτσι ώστε να μην μπορούν να τροποποιηθούν ή να καταργηθούν αργότερα. Το shell επιτρέπει την ορισμένη της τιμής μιας μεταβλητής την ίδια στιγμή που επισημαίνεται ως μόνο για ανάγνωση γράφοντας
readonly name=value
Χωρίς ορίσματα, η εντολή readonly καταγράφει τα ονόματα όλων των μεταβλητών μόνο για ανάγνωση. Με την επιλογή -p, η έξοδος θα μορφοποιηθεί κατάλληλα για μη διαδραστική χρήση.
printf format [value]...
Η printf μορφοποιεί και εκτυπώνει τα ορίσματά της σύμφωνα με το format, μια συμβολοσειρά χαρακτήρων που περιέχει τρεις τύπους αντικειμένων: απλούς χαρακτήρες, οι οποίοι αντιγράφονται απλά στην τυπική έξοδο, ακολουθίες απόδρασης χαρακτήρων που μετατρέπονται και αντιγράφονται στην τυπική έξοδο και προδιαγραφές μορφής, καθεμία από τις οποίες προκαλεί την εκτύπωση της επόμενης διαδοχικής τιμής.
Κάθε τιμή αντιμετωπίζεται ως συμβολοσειρά εάν η αντίστοιχη προδιαγραφή μορφής είναι είτε b, είτε c, είτε s· διαφορετικά, αξιολογείται ως σταθερά C, με τις ακόλουθες προσθήκες: Ένα προκαταρκτικό συν ή μείον επιτρέπεται. Εάν ο πρώτος χαρακτήρας είναι ένα απλό ή διπλό εισαγωγικό, η τιμή του επόμενου byte.
Η συμβολοσειρά μορφής επαναχρησιμοποιείται όσες φορές είναι απαραίτητο, μέχρι να καταναλωθούν όλες οι τιμές. Οποιεσδήποτε επιπλέον προδιαγραφές μορφής αξιολογούνται με μηδέν ή την μηδενική συμβολοσειρά.
Οι ακολουθίες απόδρασης χαρακτήρων είναι σε μορφή ανάστροφης κάθετου, όπως ορίζεται στο ANSI X3.159-1989 (“ANSI C89”). Οι χαρακτήρες και οι σημασίες τους είναι οι εξής:
\a Εκτύπωση ενός χαρακτήρα <κουδουνιού>.
\b Εκτύπωση ενός χαρακτήρα <οπισθοδρομής>.
\e Εκτύπωση ενός χαρακτήρα <απόδρασης> (ESC).
\f Εκτύπωση ενός χαρακτήρα <αλλαγής σελίδας>.
\n Εκτύπωση ενός χαρακτήρα <νέας γραμμής>.
\r Εκτύπωση ενός χαρακτήρα <επιστροφής φορέα>.
\t Εκτύπωση ενός χαρακτήρα <tab>.
\v Εκτύπωση ενός χαρακτήρα <κάθετης tab>.
\\ Εκτύπωση ενός χαρακτήρα ανάστροφης κάθετου.
\num Εκτύπωση ενός χαρακτήρα 8-bit του οποίου η τιμή ASCII είναι ο 1-, 2- ή 3-ψήφιος αριθμός oct num.
Κάθε προδιαγραφή μορφής εισάγεται από τον χαρακτήρα ποσοστού (``%''). Τα υπόλοιπα της προδιαγραφής μορφής περιλαμβάνουν, με την ακόλουθη σειρά:
Μηδέν ή περισσότερες από τις ακόλουθες σημαίες:
# Ένας χαρακτήρας `'#'` που καθορίζει ότι η τιμή θα πρέπει να εκτυπώνεται σε μια ``εναλλακτική μορφή``. Για τις μορφές b, c, d και s, αυτή η επιλογή δεν έχει καμία επίδραση.
Για τη μορφή o, η ακρίβεια του αριθμού αυξάνεται για να αναγκαστεί ο πρώτος χαρακτήρας της συμβολοσειράς εξόδου να είναι μηδέν. Για τη μορφή x (X), ένα μη μηδενικό αποτέλεσμα έχει την συμβολοσειρά 0x (0X) προστεθεί μπροστά του. Για τις μορφές e, E, f, g και G, το αποτέλεσμα θα περιέχει πάντα ένα δεκαδικό σημείο, ακόμη και αν δεν ακολουθούν ψηφία μετά το σημείο (κανονικά, ένα δεκαδικό σημείο εμφανίζεται μόνο στα αποτελέσματα αυτών των μορφών εάν ακολουθεί ένα ψηφίο μετά το δεκαδικό σημείο). Για τις μορφές g και G, τα επιπλέον μηδενικά δεν αφαιρούνται από το αποτέλεσμα όπως θα ήταν διαφορετικά.
- Ένα σημάδι μείον `-' το οποίο καθορίζει την αριστερή στοίχιση της εξόδου στο καθορισμένο πεδίο.
+ Ένας χαρακτήρας `+' που καθορίζει ότι θα πρέπει πάντα να τοποθετείται ένα πρόσημο πριν από τον αριθμό κατά τη χρήση μορφών με πρόσημο.
‘ ’ Ένας κενός χαρακτήρας που καθορίζει ότι θα πρέπει να αφεθεί ένα κενό πριν από έναν θετικό αριθμό για μια μορφή με πρόσημο. Ένα `+' υπερισχύει ενός κενού εάν χρησιμοποιηθούν και τα δύο.
0 Ένα μηδέν `0' που υποδεικνύει ότι θα πρέπει να χρησιμοποιηθεί μηδενική συμπλήρωση αντί για συμπλήρωση με κενά. Ένα `-' υπερισχύει ενός `0' εάν χρησιμοποιηθούν και τα δύο.
Πλάτος Πεδίου: Μια προαιρετική συμβολοσειρά ψηφίων που καθορίζει ένα πλάτος πεδίου. εάν η συμβολοσειρά εξόδου έχει λιγότερους χαρακτήρες από το πλάτος πεδίου, θα συμπληρωθεί με κενά στα αριστερά (ή στα δεξιά, εάν έχει δοθεί ο δείκτης αριστερής στοίχισης) για να συμπληρωθεί το πλάτος πεδίου (σημειώστε ότι ένα αρχικό μηδέν είναι μια σημαία, αλλά ένα ενσωματωμένο μηδέν αποτελεί μέρος ενός πλάτους πεδίου).
Ακρίβεια: Μια προαιρετική τελεία, ‘.’, ακολουθούμενη από μια προαιρετική συμβολοσειρά ψηφίων που δίνει μια ακρίβεια, η οποία καθορίζει τον αριθμό των ψηφίων που θα εμφανίζονται μετά την υποδιαστολή, για τις μορφές e και f, ή τον μέγιστο αριθμό byte που θα εκτυπωθούν από μια συμβολοσειρά (μορφές b και s). εάν η συμβολοσειρά ψηφίων λείπει, η ακρίβεια αντιμετωπίζεται ως μηδέν.
Μορφή: Ένας χαρακτήρας που υποδεικνύει τον τύπο μορφής που θα χρησιμοποιηθεί (ένας από τους diouxXfwEgGbcs).
Ένα πλάτος πεδίου ή μια ακρίβεια μπορεί να είναι ‘*’ αντί για μια συμβολοσειρά ψηφίων. Σε αυτήν την περίπτωση, ένα όρισμα παρέχει το πλάτος πεδίου ή την ακρίβεια.
Οι χαρακτήρες μορφής και οι σημασίες τους είναι:
diouXx Το όρισμα εκτυπώνεται ως δεκαδικός αριθμός με πρόσημο (d ή i), οκταδικός αριθμός χωρίς πρόσημο, δεκαδικός αριθμός χωρίς πρόσημο ή δεκαεξαδικός αριθμός χωρίς πρόσημο (X ή x), αντίστοιχα.
f Το όρισμα εκτυπώνεται με το στυλ [-]ddd.ddd όπου ο αριθμός των d μετά την υποδιαστολή είναι ίσος με την προδιαγραφή ακρίβειας για το όρισμα. Εάν η ακρίβεια λείπει, δίνονται 6 ψηφία. εάν η ακρίβεια καθορίζεται ρητά ως 0, δεν εκτυπώνονται ψηφία ούτε υποδιαστολή.
eE Το όρισμα εκτυπώνεται με το στυλ [-]d.ddde±dd όπου υπάρχει ένα ψηφίο πριν από την υποδιαστολή και ο αριθμός μετά είναι ίσος με την προδιαγραφή ακρίβειας για το όρισμα. όταν λείπει η ακρίβεια, παράγονται 6 ψηφία. Ένα κεφαλαίο E χρησιμοποιείται για μια μορφή \`E'.
gG Το όρισμα εκτυπώνεται είτε με το στυλ f είτε με το στυλ e (E), όποιο και αν δίνει πλήρη ακρίβεια με τον ελάχιστο χώρο.
b Οι χαρακτήρες από τη συμβολοσειρά ορισμάτων εκτυπώνονται με τις ακολουθίες διαφυγής με ανάστροφη κάθετο επεκταμένες. Οι ακόλουθες πρόσθετες ακολουθίες διαφυγής με ανάστροφη κάθετο υποστηρίζονται:
\c Προκαλεί την παράλειψη του dash οποιωνδήποτε εναπομεινάντων χαρακτήρων στην συμβολοσειρά ορισμάτων που την περιέχει, οποιωνδήποτε εναπομεινάντων συμβολοσειρών ορισμάτων και οποιωνδήποτε πρόσθετων χαρακτήρων στο όρισμα μορφής.
\0num Εμφανίζει έναν χαρακτήρα 8-bit του οποίου η τιμή ASCII είναι ο μονοψήφιος, διψήφιος ή τριψήφιος οκταδικός αριθμός num.
c Εμφανίζει τον πρώτο χαρακτήρα του ορίσματος.
s Εμφανίζει χαρακτήρες από τη συμβολοσειρά του ορίσματος μέχρι το τέλος της ή μέχρι να φτάσει τον αριθμό των byte που καθορίζεται από την παράμετρο ακρίβειας. Εάν η παράμετρος ακρίβειας παραλειφθεί, εμφανίζονται όλοι οι χαρακτήρες της συμβολοσειράς.
% Εμφανίζει ένα `%`; δεν χρησιμοποιείται κανένα όρισμα.
Σε καμία περίπτωση η μη ύπαρξη ή η μικρή τιμή του πλάτους πεδίου δεν προκαλεί περικοπή ενός πεδίου· η συμπλήρωση πραγματοποιείται μόνο εάν το καθορισμένο πλάτος πεδίου υπερβαίνει το πραγματικό πλάτος.
set [{ -options | +options | -- }] arg ...
Η εντολή set εκτελεί τρεις διαφορετικές λειτουργίες.
Χωρίς ορίσματα, εμφανίζει τις τιμές όλων των μεταβλητών του κελύφους.
Εάν παρέχονται επιλογές, ορίζει τις καθορισμένες σημαίες επιλογών ή τις απενεργοποιεί όπως περιγράφεται στην ενότητα με τίτλο «Επεξεργασία της Λίστας Ορισμάτων». Ως ειδική περίπτωση, εάν η επιλογή είναι -o ή +o και δεν παρέχεται κανένα όρισμα, το κέλυφος εμφανίζει τις ρυθμίσεις όλων των επιλογών του. Εάν η επιλογή είναι -o, οι ρυθμίσεις εμφανίζονται σε μορφή αναγνώσιμη από τον άνθρωπο· εάν η επιλογή είναι +o, οι ρυθμίσεις εμφανίζονται σε μορφή κατάλληλη για επαναεισαγωγή στο κέλυφος για την εφαρμογή των ίδιων ρυθμίσεων επιλογών.
Επιπλέον των ονομάτων επιλογών που αναφέρονται στην ενότητα «Επεξεργασία της Λίστας Ορισμάτων», οι ακόλουθες επιλογές μπορούν να καθοριστούν ως ορίσματα στις επιλογές -o ή +o:
pipefail Καθορίζει την κατάσταση εξόδου μιας σειράς εντολών με βάση τις καταστάσεις εξόδου όλων των εντολών στη σειρά, και όχι μόνο της τελευταίας εντολής, όπως περιγράφεται στην ενότητα «Σειρές Εντολών».
Η τρίτη χρήση της εντολής set είναι να ορίσει τις τιμές των παραμέτρων θέσης του κελύφους στις καθορισμένες τιμές args. Για να αλλάξετε τις παραμέτρους θέσης χωρίς να αλλάξετε καμία επιλογή, χρησιμοποιήστε το -- ως το πρώτο όρισμα στην εντολή set. Εάν δεν υπάρχουν args, η εντολή set θα διαγράψει όλες τις παραμέτρους θέσης (ισοδύναμο με την εκτέλεση της εντολής shift $#).
shift [n]
Μετατοπίζει τις παραμέτρους θέσης n φορές. Μια μετατόπιση ορίζει την τιμή του $1 στην τιμή του $2, την τιμή του $2 στην τιμή του $3 και ούτω καθεξής, μειώνοντας την τιμή του $# κατά ένα. Εάν το n είναι μεγαλύτερο από τον αριθμό των παραμέτρων θέσης, η εντολή shift θα εκδώσει ένα μήνυμα σφάλματος και θα τερματιστεί με κατάσταση εξόδου 2.
test expression
[ expression ]
Η βοηθητική εφαρμογή test αξιολογεί την έκφραση και, εάν η έκφραση έχει τιμή αληθής, επιστρέφει κατάσταση εξόδου μηδέν (αληθής). διαφορετικά, επιστρέφει 1 (ψευδής). Εάν δεν υπάρχει έκφραση, η εντολή test επιστρέφει επίσης 1 (ψευδής).
Όλοι οι τελεστές και οι σημαίες είναι ξεχωριστά ορίσματα στην βοηθητική εφαρμογή test.
Οι ακόλουθοι πρωτογενείς όροι χρησιμοποιούνται για τη δημιουργία της έκφρασης:
-b file Αληθές εάν το `file` υπάρχει και είναι μια ειδική συσκευή μπλοκ.
-c file Αληθές εάν το `file` υπάρχει και είναι μια ειδική συσκευή χαρακτήρων.
-d file Αληθές εάν το `file` υπάρχει και είναι ένας κατάλογος.
-e file Αληθές εάν το `file` υπάρχει (ανεξάρτητα από τον τύπο).
-f file Αληθές εάν το `file` υπάρχει και είναι ένα κανονικό αρχείο.
-g file Επιστρέφει True εάν το αρχείο υπάρχει και η σημαία του set group ID είναι ενεργοποιημένη.
-h file Επιστρέφει True εάν το αρχείο υπάρχει και είναι ένας συμβολικός σύνδεσμος.
-k file Επιστρέφει True εάν το αρχείο υπάρχει και η σημαία του sticky bit είναι ενεργοποιημένη.
-n string Επιστρέφει True εάν το μήκος της συμβολοσειράς είναι μη μηδενικό.
-p file Επιστρέφει True εάν το αρχείο είναι μια ονομασμένη σωλήνα (FIFO).
-r file Επιστρέφει True εάν το αρχείο υπάρχει και είναι αναγνώσιμο.
-s file Επιστρέφει True εάν το αρχείο υπάρχει και έχει μέγεθος μεγαλύτερο του μηδενός.
-t file_descriptor
Επιστρέφει True εάν το αρχείο του οποίου ο αριθμός περιγραφής αρχείου είναι file_descriptor είναι ανοιχτό και σχετίζεται με ένα τερματικό.
-u file Επιστρέφει True εάν το αρχείο υπάρχει και η σημαία του set user ID είναι ενεργοποιημένη.
-w file Επιστρέφει True εάν το αρχείο υπάρχει και είναι εγγράψιμο. Το True υποδεικνύει μόνο ότι η σημαία εγγραφής είναι ενεργοποιημένη. Το αρχείο δεν είναι εγγράψιμο σε ένα σύστημα αρχείων μόνο για ανάγνωση, ακόμη και αν αυτή η δοκιμή υποδεικνύει True.
-x file Επιστρέφει True εάν το αρχείο υπάρχει και είναι εκτελέσιμο. Το True υποδεικνύει μόνο ότι η σημαία εκτέλεσης είναι ενεργοποιημένη. Εάν το αρχείο είναι ένας κατάλογος, το True υποδεικνύει ότι το αρχείο μπορεί να αναζητηθεί.
-z string Επιστρέφει True εάν το μήκος της συμβολοσειράς είναι μηδέν.
-L file Επιστρέφει True εάν το αρχείο υπάρχει και είναι ένας συμβολικός σύνδεσμος. Αυτός ο χειριστής διατηρείται για λόγους συμβατότητας με προηγούμενες εκδόσεις αυτού του προγράμματος. Μην βασίζεστε στην ύπαρξή του. χρησιμοποιήστε το -h αντ' αυτού.
-O file Επιστρέφει True εάν το αρχείο υπάρχει και ο ιδιοκτήτης του ταιριάζει με το αποτελεσματικό user ID αυτής της διαδικασίας.
-G file Επιστρέφει True εάν το αρχείο υπάρχει και η ομάδα του ταιριάζει με το αποτελεσματικό group ID αυτής της διαδικασίας.
-S file Επιστρέφει True εάν το αρχείο υπάρχει και είναι μια υποδοχή.
file1 -nt file2
Επιστρέφει True εάν τα file1 και file2 υπάρχουν και το file1 είναι νεότερο από το file2, ή εάν το file1 υπάρχει αλλά το file2 δεν υπάρχει.
file1 -ot file2
Επιστρέφει True εάν τα file1 και file2 υπάρχουν και το file1 είναι παλαιότερο από το file2, ή εάν το file2 υπάρχει αλλά το file1 δεν υπάρχει.
file1 -ef file2
Επιστρέφει True εάν τα file1 και file2 υπάρχουν και αναφέρονται στο ίδιο αρχείο.
string Επιστρέφει True εάν η συμβολοσειρά δεν είναι η κενή συμβολοσειρά.
s1 = s2 Επιστρέφει True εάν οι συμβολοσειρές s1 και s2 είναι πανομοιότυπες.
s1 != s2 Επιστρέφει True εάν οι συμβολοσειρές s1 και s2 δεν είναι πανομοιότυπες.
s1 < s2 Επιστρέφει True εάν η συμβολοσειρά s1 έρχεται πριν από τη s2 με βάση την τιμή ASCII των χαρακτήρων της.
s1 > s2 Επιστρέφει True εάν η συμβολοσειρά s1 έρχεται μετά τη s2 με βάση την τιμή ASCII των χαρακτήρων της.
n1 -eq n2 Επιστρέφει True εάν οι ακέραιοι αριθμοί n1 και n2 είναι αλγεβρικά ίστοι.
n1 -ne n2 Επιστρέφει True εάν οι ακέραιοι αριθμοί n1 και n2 δεν είναι αλγεβρικά ίσοι.
n1 -gt n2 Επιστρέφει True εάν ο ακέραιος αριθμός n1 είναι αλγεβρικά μεγαλύτερος από τον ακέραιο αριθμό n2.
n1 -ge n2 Επιστρέφει True εάν ο ακέραιος αριθμός n1 είναι αλγεβρικά μεγαλύτερος ή ίσος με τον ακέραιο αριθμό n2.
n1 -lt n2 Επιστρέφει True εάν ο ακέραιος αριθμός n1 είναι αλγεβρικά μικρότερος από τον ακέραιο αριθμό n2.
n1 -le n2 Επιστρέφει True εάν ο ακέραιος αριθμός n1 είναι αλγεβρικά μικρότερος ή ίσος με τον ακέραιο αριθμό n2.
Αυτά τα βασικά στοιχεία μπορούν να συνδυαστούν με τους ακόλουθους τελεστές:
! expression Επιστρέφει True εάν η έκφραση είναι false.
expression1 -a expression2
Επιστρέφει True εάν και οι δύο εκφράσεις expression1 και expression2 είναι true.
expression1 -o expression2
Επιστρέφει True εάν είτε η έκφραση expression1 είτε η έκφραση expression2 είναι true.
(έκφραση) Επιστρέφει True αν η έκφραση είναι αληθής.
Ο τελεστής -a έχει μεγαλύτερη προτεραιότητα από τον τελεστή -o.
times Εκτυπώνει τον συσσωρευμένο χρόνο χρήστη και συστήματος για το κέλυφος και για τις διεργασίες που εκτελούνται από το κέλυφος. Η κατάσταση επιστροφής είναι 0.
trap [ενέργεια σήμα ...]
Προκαλεί το κέλυφος να αναλύσει και να εκτελέσει την ενέργεια όταν λαμβάνεται οποιοδήποτε από τα καθορισμένα σήματα. Τα σήματα καθορίζονται με τον αριθμό του σήματος ή με το όνομα του σήματος. Εάν το σήμα είναι 0 ή EXIT, η ενέργεια εκτελείται όταν το κέλυφος τερματίζεται. Η ενέργεια μπορεί να είναι κενή (''), γεγονός που προκαλεί την αγνόηση των καθορισμένων σημάτων. Όταν η ενέργεια παραλείπεται ή ορίζεται σε `-' τα καθορισμένα σήματα επαναφέρονται στην προεπιλεγμένη τους ενέργεια. Όταν το κέλυφος δημιουργεί μια υπο-διαδικασία, επαναφέρει τα παγιδευμένα (αλλά όχι αγνοημένα) σήματα στην προεπιλεγμένη τους ενέργεια. Η εντολή trap δεν έχει καμία επίδραση στα σήματα που είχαν αγνοηθεί κατά την είσοδο στο κέλυφος. Η εντολή trap χωρίς κανένα όρισμα προκαλεί την εκτύπωση μιας λίστας σημάτων και της σχετικής ενέργειας στην τυπική έξοδο σε μια μορφή που είναι κατάλληλη ως είσοδος για το κέλυφος που επιτυγχάνει τα ίδια αποτελέσματα παγίδευσης.
Παραδείγματα:
trap
Εμφανίζει τα παγιδευμένα σήματα και την αντίστοιχη ενέργεια.
trap '' INT QUIT tstp 30
Αγνοεί τα σήματα INT QUIT TSTP USR1
trap date INT
Εκτυπώνει την ημερομηνία κατά τη λήψη του σήματος INT
type [όνομα ...]
Ερμηνεύει κάθε όνομα ως εντολή και εκτυπώνει την ανάλυση της αναζήτησης της εντολής. Οι πιθανές αναλύσεις είναι: λέξη-κλειδί κελύφους, ψευδώνυμο, ενσωματωμένη εντολή κελύφους, εντολή, παρακολουθούμενο ψευδώνυμο και δεν βρέθηκε. Για τα ψευδώνυμα, εκτυπώνεται η επέκταση του ψευδωνύμου. για εντολές και παρακολουθούμενα ψευδώνυμα, εκτυπώνεται η πλήρης διαδρομή της εντολής.
ulimit [-H | -S] [-a | -tfdscmlpnvwr [τιμή]]
Ελέγχει ή ορίζει τα σκληρά ή τα μαλακά όρια στις διεργασίες ή ορίζει νέα όρια. Η επιλογή μεταξύ του σκληρού ορίου (το οποίο καμία διεργασία δεν επιτρέπεται να παραβιάσει και το οποίο δεν μπορεί να αυξηθεί αφού μειωθεί) και του μαλακού ορίου (το οποίο προκαλεί την αποστολή σήματος στις διεργασίες, αλλά όχι απαραίτητα τη διακοπή τους και το οποίο μπορεί να αυξηθεί) γίνεται με αυτές τις σημαίες:
-H ορίζει ή ελέγχει τα σκληρά όρια
-S ελέγχει ή ορίζει τα μαλακά όρια. Εάν δεν έχει καθοριστεί ούτε το -H ούτε το -S, εμφανίζεται το μαλακό όριο ή ορίζονται και τα δύο όρια. Εάν και τα δύο έχουν καθοριστεί, το τελευταίο έχει προτεραιότητα.
Στη συνέχεια, το όριο που θα ελεγχθεί ή θα οριστεί επιλέγεται με την προδιαγραφή οποιασδήποτε από αυτές τις σημαίες:
-a εμφανίζει όλα τα τρέχοντα όρια
-t εμφανίζει ή ορίζει το όριο του χρόνου CPU (σε δευτερόλεπτα)
-f εμφανίζει ή ορίζει το όριο του μεγαλύτερου μεγέθους αρχείου που μπορεί να δημιουργηθεί (σε μπλοκ των 512 byte)
-d εμφανίζει ή ορίζει το όριο του μεγέθους της περιοχής δεδομένων μιας διεργασίας (σε kilobyte)
-s εμφανίζει ή ορίζει το όριο του μεγέθους της στοίβας μιας διεργασίας (σε kilobyte)
-c εμφανίζει ή ορίζει το όριο του μεγαλύτερου μεγέθους πυρήνα που μπορεί να δημιουργηθεί (σε μπλοκ των 512 byte)
-m εμφανίζει ή ορίζει το όριο της συνολικής φυσικής μνήμης που μπορεί να χρησιμοποιείται από μια διεργασία (σε kilobyte)
-l εμφανίζει ή ορίζει το όριο του πόσης μνήμης μπορεί να κλειδώσει μια διεργασία με τη χρήση της mlock(2) (σε kilobyte)
-p εμφανίζει ή ορίζει το όριο για τον αριθμό των διεργασιών που μπορεί να έχει αυτός ο χρήστης ταυτόχρονα.
-n εμφανίζει ή ορίζει το όριο για τον αριθμό των αρχείων που μπορεί να έχει ανοιχτά μια διεργασία ταυτόχρονα.
-v εμφανίζει ή ορίζει το όριο για τη συνολική ποσότητα εικονικής μνήμης που μπορεί να χρησιμοποιεί μια διεργασία (σε κιλομπάιτ).
-w εμφανίζει ή ορίζει το όριο για τον συνολικό αριθμό των κλειδωμάτων που διατηρεί μια διεργασία.
-r εμφανίζει ή ορίζει το όριο για την προτεραιότητα χρονοδιαγράμματος σε πραγματικό χρόνο μιας διεργασίας.
Εάν δεν καθοριστεί κανένα από αυτά, τότε εμφανίζεται ή ορίζεται το όριο για το μέγεθος του αρχείου. Εάν καθοριστεί μια τιμή, το όριο ορίζεται σε αυτόν τον αριθμό. διαφορετικά, εμφανίζεται το τρέχον όριο.
Τα όρια μιας αυθαίρετης διεργασίας μπορούν να εμφανιστούν ή να οριστούν χρησιμοποιώντας την εντολή sysctl(8).
umask [μάσκα]
Ορίζει την τιμή του umask (δείτε umask(2)) στην καθορισμένη οκταδική τιμή. Εάν παραλειφθεί το όρισμα, εκτυπώνεται η τιμή του umask.
unalias [-a] [όνομα]
Εάν καθοριστεί το όνομα, η συντόμευση αφαιρείται. Εάν καθοριστεί το -a, όλες οι συντομεύσεις αφαιρούνται.
unset [-fv] όνομα ...
Οι καθορισμένες μεταβλητές και συναρτήσεις καταργούνται και δεν εξάγονται. Εάν καθοριστούν τα -f ή -v, η αντίστοιχη συνάρτηση ή μεταβλητή καταργείται, αντίστοιχα. Εάν ένα δεδομένο όνομα αντιστοιχεί τόσο σε μια μεταβλητή όσο και σε μια συνάρτηση και δεν δίνονται επιλογές, καταργείται μόνο η μεταβλητή.
wait [εργασία]
Περιμένει να ολοκληρωθεί η καθορισμένη εργασία και επιστρέφει την κατάσταση εξόδου της τελευταίας διεργασίας στην εργασία. Εάν παραλειφθεί το όρισμα, περιμένει να ολοκληρωθούν όλες οι εργασίες και επιστρέφει μια κατάσταση εξόδου μηδέν.
Επεξεργασία Γραμμής Εντολών
Όταν το dash χρησιμοποιείται διαδραστικά από ένα τερματικό, η τρέχουσα εντολή και το ιστορικό εντολών (δείτε το fc στα "Ενσωματωμένα") μπορούν να επεξεργαστούν χρησιμοποιώντας την επεξεργασία γραμμής εντολών σε λειτουργία vi. Αυτή η λειτουργία χρησιμοποιεί εντολές, που περιγράφονται παρακάτω, παρόμοιες με ένα υποσύνολο αυτών που περιγράφονται στη σελίδα man του vi. Η εντολή 'set -o vi' ενεργοποιεί την επεξεργασία γραμμής εντολών σε λειτουργία vi και τοποθετεί το sh σε λειτουργία εισαγωγής vi. Με την ενεργοποιημένη λειτουργία vi, το sh μπορεί να μεταβεί μεταξύ της λειτουργίας εισαγωγής και της λειτουργίας εντολών. Είναι παρόμοιο με το vi: η πληκτρολόγηση ⟨ESC⟩ εισέρχεται στην λειτουργία εντολών vi. Η πληκτρολόγηση ⟨return⟩ ενώ είστε σε λειτουργία εντολών θα περάσει τη γραμμή στο κέλυφος.
ΚΑΤΑΣΤΑΣΗ ΕΞΟΔΟΥ
Σφάλματα που εντοπίζονται από το κέλυφος, όπως ένα σφάλμα σύνταξης, θα προκαλέσουν την έξοδο του κελύφους με μια μη μηδενική κατάσταση εξόδου. Εάν το κέλυφος δεν είναι ένα διαδραστικό κέλυφος, η εκτέλεση του αρχείου κελύφους θα διακοπεί. Διαφορετικά, το κέλυφος θα επιστρέψει την κατάσταση εξόδου της τελευταίας εκτελεσθείσας εντολής ή, εάν χρησιμοποιείται η ενσωματωμένη εντολή exit με ένα αριθμητικό όρισμα, θα επιστρέψει το όρισμα.
ΠΕΡΙΒΑΛΛΟΝ
HOME Ορίζεται αυτόματα από την εντολή login(1) από τον κατάλογο σύνδεσης του χρήστη στο αρχείο κωδικών πρόσβασης (passwd(4)). Αυτή η μεταβλητή περιβάλλοντος λειτουργεί επίσης ως το προεπιλεγμένο όρισμα για την ενσωματωμένη εντολή cd.
PATH Η προεπιλεγμένη διαδρομή αναζήτησης για εκτελέσιμα αρχεία. Δείτε την παραπάνω ενότητα "Αναζήτηση Διαδρομής".
CDPATH Η διαδρομή αναζήτησης που χρησιμοποιείται με την ενσωματωμένη εντολή cd.
MAIL Το όνομα ενός αρχείου αλληλογραφίας, το οποίο θα ελέγχεται για την άφιξη νέων μηνυμάτων. Αντικαθίσταται
από το MAILPATH.
MAILCHECK Η συχνότητα σε δευτερόλεπτα με την οποία το shell ελέγχει για την άφιξη αλληλογραφίας στα αρχεία
που καθορίζονται από το MAILPATH ή το MAIL. Εάν οριστεί σε 0, ο έλεγχος θα πραγματοποιείται σε κάθε
πρόσκληση.
MAILPATH Μια λίστα ονομάτων αρχείων διαχωρισμένων με άνω και κάτω τελεία, για την οποία το shell θα ελέγχει για εισερχόμενη αλληλογραφία.
Αυτή η ρύθμιση περιβάλλοντος αντικαθιστά τη ρύθμιση MAIL. Υπάρχει ένα μέγιστο όριο 10 θυρίδων αλληλογραφίας που μπορούν να παρακολουθούνται ταυτόχρονα.
PS1 Η κύρια συμβολοσειρά προτροπής, η οποία από προεπιλογή είναι "$ ", εκτός εάν είστε ο χρήστης root,
οπότε από προεπιλογή είναι "# ".
PS2 Η δευτερεύουσα συμβολοσειρά προτροπής, η οποία από προεπιλογή είναι "> ".
PS4 Έξοδος πριν από κάθε γραμμή όταν είναι ενεργοποιημένη η εντολή εκτέλεσης (set -x), από προεπιλογή είναι "+ ".
IFS Διαχωριστές πεδίων εισόδου. Αυτό συνήθως ορίζεται σε ⟨κενό⟩, ⟨tab⟩ και ⟨νέα γραμμή⟩. Δείτε
την ενότητα "Διαχωρισμός κενού χώρου" για περισσότερες λεπτομέρειες.
TERM Η προεπιλεγμένη ρύθμιση τερματικού για το shell. Αυτό κληρονομείται από τις θυγατρικές διεργασίες του
shell και χρησιμοποιείται στις λειτουργίες επεξεργασίας ιστορικού.
HISTSIZE Ο αριθμός των γραμμών στο buffer ιστορικού για το shell.
PWD Η λογική τιμή του τρέχοντος καταλόγου εργασίας. Αυτό ορίζεται από την εντολή cd.
OLDPWD Η προηγούμενη λογική τιμή του τρέχοντος καταλόγου εργασίας. Αυτό ορίζεται από την εντολή cd.
PPID Το ID της διεργασίας της γονικής διεργασίας του shell.
ΑΡΧΕΙΑ
$HOME/.profile
/etc/profile
ΔΕΙΤΕ ΕΠΙΣΗΣ
csh(1), echo(1), getopt(1), ksh(1), login(1), printf(1), test(1), getopt(3), passwd(5), environ(7), sysctl(8)
ΙΣΤΟΡΙΚΟ
Το dash είναι μια υλοποίηση συμβατή με το POSIX του /bin/sh που στοχεύει στο να είναι όσο το δυνατόν μικρότερη.
Το dash είναι άμεσος απόγονος της έκδοσης NetBSD του ash (το Almquist SHell), που μεταφέρθηκε στο Linux
στις αρχές του 1997. Μετονομάστηκε σε dash το 2002.
ΣΦΑΛΜΑΤΑ
Τα σενάρια shell με setuid θα πρέπει να αποφεύγονται με κάθε κόστος, καθώς αποτελούν σημαντικό κίνδυνο για την ασφάλεια.
Οι PS1, PS2 και PS4 θα πρέπει να υπόκεινται σε επέκταση παραμέτρων πριν εμφανιστούν.