Μετάβαση στο περιεχόμενο

Κέλυφος bash

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
Κέλυφος bash
Στιγμιότυπο από την χρήση του κέλυφους bash.
Γενικά
ΔημιουργοίBrian Fox
Ημερ. Δημιουργίας8 Ιουνίου 1989
Είδοςελεύθερο λογισμικό,κέλυφος Unix,Διερμηνέας γραμμής εντολών,γλώσσα προγραμματισμού
Διανομή
Έκδοση5.2.37 (23 Σεπτέμβριος 2024)[1]
ΛειτουργικάGNU/Linux, BSD,macOS,Microsoft Windows
Αρχιτεκτονικήx86_64,[2]i686[2]
Διαθέσιμο σε37 γλώσσες (και στα ελληνικά)
Ανάπτυξη
Υπευθ. ανάπτυξηςΕγχείρημα GNU
Γραμμένο σεC
Σύνδεσμοι
Επίσημος ιστότοπος
https://www.gnu.org/software/bash/
Αποθετήριο κώδικα
https://git.savannah.gnu.org/gitweb/?p=bash.git
Εικόνα του bash και τουsh,η οποία δείχνει κάποια χαρακτηριστικά τους.

ΤοBashείναι ένακέλυφοςελεύθερου λογισμικούτουUnixπου δημιουργήθηκε από τοεγχείρημα GNU.Τα αρχικά του ονόματός του προκύπτουν από την έκφρασηBourne-again shell.[3]Το όνομα είναι λογοπαίγνιο βασισμένο στο όνομα τουκελύφους Bourne(sh), ενός παλιού αλλά σημαντικού κελύφους του Unix που είχε γραφτεί από τον Stephen Bourne και κυκλοφόρησε με την7η Έκδοση του Unixγύρω στο 1978,[4]και στην κλασική έννοια του Χριστιανισμού, τηναναγέννηση(born again). Το Bash δημιουργήθηκε το 1987 από τον Brian Fox. Το 1990 βασικός προγραμματιστής του έγινε ο Chet Ramey.[5]

Το Bash είναι ένα κέλυφος σύμφωνο με το πρότυποPOSIXμε κάποιες επεκτάσεις, ενώ είναι και το κέλυφος τουλειτουργικού συστήματος GNUτου εγχειρήματος GNU. Μπορεί να τρέξει στα πιο πολλάUnix-οειδή λειτουργικά συστήματα. Είναι το προεπιλεγμένο κέλυφος στα περισσότερα συστήματα που βασίζονται στονπυρήνα του Linuxκαθώς και στοMac OS Xκαι στοDarwin.Έχει επίσης μεταφερθεί σταMicrosoft Windowsμε τη χρήση του Υποσυστήματος για Unix εφαρμογές (Subsystem for UNIX-based Applications, SUA), ή της εξομοίωσης POSIX που παρέχει τοCygwinκαι τοMSYS.Έχει μεταφερθεί επίσης στοMS-DOSαπό το εγχείρημαDJGPPκαι στοNovell NetWare.

Η σύνταξη των εντολών του Bash είναι υπερσύνολο της σύνταξης των εντολών του κελύφους Bourne. Τα πιο πολλά σενάρια κελύφους Bourne μπορούν να εκτελεστούν από το Bash χωρίς καμία αλλαγή, με την εξαίρεση σεναρίων που χρησιμοποιούν ιδιαίτερη συμπεριφορά της σύνταξης που ερμηνεύεται διαφορετικά στο Bash (π.χ. εμφωλευμένες παρενθέσεις στο Bash, σε παλαιότερη έκδοση του σεναρίου εκκίνησης του Mozilla), ή που προσπαθούν να εκτελέσουν μια εντολή του συστήματος που έχει το ίδιο όνομα με μια καινούρια ενσωματωμένη εντολή του bash, κλπ. Η σύνταξη των εντολών του Bash περιλαμβάνει ιδέες από τοκέλυφος Korn(ksh) και τοΚέλυφος C(csh), όπως η δυνατότητα διόρθωσης της γραμμής εντολών, το ιστορικό εντολών, η στοίβα φακέλων, οι μεταβλητές$RANDOMκαι$PPID,και η σύνταξη αντικατάστασης εντολώνPOSIX$(…).Όταν χρησιμοποιείται σαν διαδραστικό κέλυφος εντολών, το πλήκτρο TAB, προκαλεί την αυτόματησυμπλήρωση γραμμής εντολώνμε βάση μισά ονόματα προγραμμάτων, αρχείων ή μεταβλητών, τα οποία έχει πληκτρολογήσει ο χρήστης.

Η σύνταξη του Bash έχει αρκετές επεκτάσεις που λείπουν από το κέλυφος Bourne. Σε αντίθεση με το Bourne, το Bash μπορεί να κάνει πράξεις με ακέραιους χωρίς να ξεκινά εξωτερικές διεργασίες. Το Bash χρησιμοποιεί την εντολή((…))και τη σύνταξη μεταβλητών$((…))για αυτόν το σκοπό. Η σύνταξη του Bash απλοποιεί τηνανακατεύθυνση εισόδου-εξόδουμε τρόπους που ήταν αδύνατοι στο κλασικό κέλυφος Bourne, π.χ. το Bash μπορεί να ανακατευθύνει τηνκαθιερωμένη έξοδο(stdout) και τηνκαθιερωμένη έξοδο σφάλματος(stderr) ταυτόχρονα με χρήση του τελεστή&>.Αυτό είναι απλούστερο από την αντίστοιχη εντολή του κελύφους Bourne που είναι 'command > file 2>&1'. Οι δηλώσεις συναρτήσεων του Bash (με τη χρήση της λέξης-κλειδί 'function') δεν είναι συμβατές με τα σενάρια για τα κελύφη Bourne/Korn/POSIX/C. Λόγω αυτής και άλλων παρόμοιων διαφορών, τα σενάρια για Bash σπάνια μπορούν να εκτελεστούν στα κελύφη Bourne ή Korn εκτός και αν έχουν ήδη γραφεί έτσι ώστε να είναι συμβατά, κάτι το οποίο, καθώς το Linux εξαπλώνεται, γίνεται λιγότερο συνηθισμένο.

Το Bash υποστηρίζειhere documentsόπως και το κέλυφος Bourne. Από την έκδοση 2.05b όμως, το Bash μπορεί να ανακατευθύνει τηνκαθιερωμένη είσοδο(stdin) από ένα "here string" με τον τελεστή<<<.

Το Bash 3.0 υποστηρίζεικανονικές εκφράσειςμέσα σε διεργασίες, με μια σύνταξη σαν τηςPerl.[6]

Η επέκταση αγκυλών είναι ένα χαρακτηριστικό που πρωτοεμφανίστηκε στοκέλυφος C,το οποίο επιτρέπει τη δημιουργία συμβολοσειρών με μια τεχνική που μοιάζει με την επέκταση ονομάτων αρχείων. Όμως, τα ονόματα που παράγονται δε χρειάζεται να υπάρχουν σαν αρχεία. Τα αποτελέσματα κάθε επεκτεταμένης συμβολοσειράς δεν ταξινομούνται και διατηρείται η σειρά από τα αριστερά προς τα δεξιά:

echoa{p,c,d,b}e# ape ace ade abe

Η επέκταση αγκυλών δεν πρέπει να χρησιμοποιείται σε σενάρια που πρόκειται να τρέξουν και σε άλλα κελύφη, γιατί το κέλυφος Bourne δε θα παράγει την ίδια έξοδ.

# Ένα κλασικό κέλυφος δεν παράγει την ίδια έξοδο
echoa{p,c,d,b}e# a{p,c,d,b}e

Όταν η επέκταση αγκυλών συνδυάζεται με χαρακτήρες μπαλαντέρ, πρώτα επεκτείνονται οι αγκύλες και στη συνέχεια γίνεται η επεξεργασία των χαρακτήρων μπαλαντέρ όπου εμφανίζονται. Με αυτόν τον τρόπο, μια λίστα από τις εικόνες σε JPEG και PNG του τρέχοντος καταλόγου μπορεί να προκύψει ως εξής:

ls*.{jpg,jpeg,png}# επεκτείνεται σε *.jpg *.jpeg *.png - στη συνέχεια,
# γίνεται η επεξεργασία των χαρακτήρων μπαλαντέρ

Όταν ξεκινά το Bash, εκτελεί εντολές από διάφορα σενάρια.

Όταν καλείται σαν διαδραστικό κέλυφος εισόδου (login shell), πρώτα διαβάζει και εκτελεί τις εντολές από το αρχείο/etc/profile,αν αυτό υπάρχει. Στη συνέχεια, ψάχνει με τη σειρά για τα~/.bash_profile,~/.bash_login,και~/.profile,και εκτελεί τις εντολές από το πρώτο από αυτά που υπάρχει και τα δεδομένα του είναι διαθέσιμα για ανάγνωση.

Όταν ένα κέλυφος εισόδου τερματίζει, το Bash διαβάζει και εκτελεί τις εντολές του αρχείου~/.bash_logout,αν υπάρχει.

Όταν αρχίζει ένα διαδραστικό κέλυφος που δεν είναι κέλυφος εισόδου, το Bash διαβάζει και εκτελεί τις εντολές του αρχείου~/.bashrc,αν αυτό υπάρχει. Αυτό μπορεί να εμποδιστεί με την επιλογή--norc.Η επιλογή--rcfile fileυποχρεώνει το Bash να διαβάσει και να εκτελέσει τις εντολές από το αρχείοfileαντί για το~/.bashrc.

Κάποιες εκδόσεις του Unix έχουν ειδικά σενάρια συστήματος για το Bash που αλλάζουν την παραπάνω σειρά ή προσπαθούν να λάβουν υπόψη τους και αρχεία σεναρίων για άλλα κελύφη.

Σενάρια κελύφους που έχουν γραφτεί με ειδικά χαρακτηριστικά του Bash (bashisms) δε λειτουργούν σε συστήματα με το κέλυφος Bourne ή κάποιον από τους αντικαταστάτες του, εκτός και αν το Bash είναι επίσης εγκατεστημένο και το σενάριο αρχίζει με μια "γραμμήshebang"με το περιεχόμενο#!/bin/bashαντί του#!/bin/sh.

Συντομεύσεις πληκτρολογίου

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

Οι παρακάτω συντομεύσεις λειτουργούν χρησιμοποιώντας τον προεπιλεγμένο (Emacs) πίνακα πλήκτρων. Οι συντομεύσεις τουviμπορούν να ενεργοποιηθούν με την εκτέλεση της εντολήςset -o vi.

Δείτε επίσης:Readline

  • Tab:αυτόματη συμπλήρωση γραμμής εντολώναπό τη θέση του δρομέα.
  • Ctrl+a:μεταφέρει το δρομέα στην αρχή της γραμμής (όπως το πλήκτρο Home).
  • Ctrl+e:(τέλος) μεταφέρει το δρομέα στο τέλος της γραμμής (όπως το πλήκτρο End).
  • Ctrl+p:(προηγούμενο) θυμάται την προηγούμενη εντολή (όπως το πλήκτρο Πάνω).
  • Ctrl+n:(επόμενο) θυμάται την επόμενη εντολή (όπως το πλήκτρο Κάτω).
  • Ctrl+r:(αναζήτηση) βρίσκει την τελευταία εντολή που περιέχει τους συγκεκριμένους χαρακτήρες. Δεύτερο πάτημα του συνδυασμού βρίσκει την προηγούμενη εντολή που ικανοποιεί τα κριτήρια της αναζήτησης
  • Ctrl+s:Πηγαίνει πίσω στην πιο πρόσφατη εντολή της αναζήτησης (δεν πρέπει να εκτελείται σε τερματικό γιατί αντιστοιχεί στο σήμα τερματικού XOFF, βλ. παρακάτω).
  • Ctrl+q:Αν η ρύθμιση XOFF έχει μεταβληθεί, ο συνδυασμός αυτός επιστρέφει στην προηγούμενη κατάσταση.
  • Ctrl+o:εκτελεί την εντολή που βρέθηκε στην αναζήτηση.
  • Ctrl+l:καθαρίζει την οθόνη (όπως η εντολήclear).
  • Ctrl+u:καθαρίζει τα περιεχόμενα της γραμμής πριν το δρομέα και τα τοποθετεί στο πρόχειρο.
  • Ctrl+k:καθαρίζει τα περιεχόμενα της γραμμής μετά το δρομέα και τα τοποθετεί στο πρόχειρο.
  • Ctrl+w:καθαρίζει τα περιεχόμενα της λέξης πριν το δρομέα και τα τοποθετεί στο πρόχειρο.
  • Ctrl+y:προσθέτει στη θέση του δρομέα τα περιεχόμενα του προχείρου.
  • Ctrl+d:στέλνει ένα σημάδι EOF, το οποίο κλείνει το τρέχον κέλυφος (εκτός και αν έχει τροποποιηθεί η συμπεριφορά αυτή από κάποια επιλογή) - ισοδύναμο με την εντολήexit). (Μόνο αν δεν υπάρχει κείμενο στη γραμμή)
  • Ctrl+c:στέλνει το σήμαSIGINTστην τρέχουσα διεργασία, η οποία και τερματίζεται και κλείνει.
  • Ctrl+z:στέλνει το σήμαSIGTSTPστην τρέχουσα διεργασία, η οποία και τίθεται σε αναμονή (suspend). Η επιστροφή σε αυτή γίνεται με την εντολήfg ['όνομα διεργασίας ή κωδικός'].
  • Ctrl+x2 φορές: (λόγω του σχήματος του x) εναλλάσσεται το δείκτη μεταξύ της τρέχουσας και της προηγούμενης θέσης του.
  • Alt+f:(μπροστά) μετακινεί το δείκτη μπροστά μια λέξη.
  • Alt+b:(πίσω) μετακινεί το δείκτη πίσω μια λέξη.
  • Alt+Del:κόβει τη λέξη πριν το δρομέα.
  • Alt+d:κόβει τη λέξη μετά το δρομέα.
  • Alt+u:κάνει κεφαλαίο κάθε γράμμα από τη θέση του δρομέα μέχρι το τέλος της τρέχουσας λέξης.
  • Alt+l:κάνει πεζό κάθε γράμμα από τη θέση του δρομέα μέχρι το τέλος της τρέχουσας λέξης.
  • Alt+c:κάνει κεφαλαίο το χαρακτήρα στη θέση του δρομέα και μετακινείται στο τέλος της λέξης.
  • Alt+r:ακυρώνει τις όποιες αλλαγές και επιστρέφει στη γραμμή όπως ήταν στο ιστορικό.
  1. Error: Unable to display the reference properly. Seethe documentationfor details.
  2. 2,02,1Error: Unable to display the reference properly. Seethe documentationfor details.
  3. C Programmingby Al Stevens, Dr. Dobb's Journal, 1η Ιουλίου 2001
  4. Rosalyn Lum (1 Ιουνίου 2005).«Fresh Faces».Dr. Dobb's Journal.Ανακτήθηκε στις 27 Φεβρουαρίου 2024.
  5. Ramey, Chet (1 Αυγούστου 1994).«Bash - the GNU shell (Reflections and Lessons Learned)».Linux Journal.Ανακτήθηκε στις 13 Νοεμβρίου 2008.
  6. Η σύνταξη μοιάζει με αυτή που φαίνεται στη σελίδα manregex(7).

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

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