Ορισμένες επιλογές του Bash είναι γνωστές και χρησιμοποιούνται συχνά. Για παράδειγμα, πολλοί άνθρωποι γράφουν στην αρχή του σεναρίου
σύνολο -o xtrace
για αποσφαλμάτωση,
σετ -ο errexit
να βγείτε κατά λάθος ή
σετ -o εσφαλμένος
για έξοδο εάν δεν έχει οριστεί η καλούμενη μεταβλητή.
Υπάρχουν όμως πολλές άλλες επιλογές. Μερικές φορές περιγράφονται πολύ μπερδεμένα στα manas, οπότε έχω συγκεντρώσει μερικά από τα πιο χρήσιμα εδώ, με επεξήγηση.
Σημείωση: Οι υπολογιστές Mac μπορεί να έχουν μια παλαιότερη έκδοση του bash (3.x αντί 4.x), όπου δεν είναι διαθέσιμες όλες αυτές οι επιλογές. Σε αυτή την περίπτωση, βλ
set
ή shopt
?
Υπάρχουν δύο τρόποι για να ορίσετε επιλογές bash: από ένα σενάριο ή από τη γραμμή εντολών. Μπορείτε να χρησιμοποιήσετε ενσωματωμένες εντολές set
и shopt
. Και τα δύο αλλάζουν τη συμπεριφορά του κελύφους, κάνουν σχεδόν το ίδιο πράγμα (με διαφορετικά επιχειρήματα), αλλά διαφέρουν ως προς το δικό τους set
κληρονομούνται ή δανείζονται από παραμέτρους άλλων κελυφών, ενώ παράμετροι shopt
δημιουργήθηκε στο bash.
Εάν θέλετε να δείτε τις τρέχουσες επιλογές, εκτελέστε:
$ set -o
$ shopt
Για να ενεργοποιήσετε την επιλογή στο set
Χρησιμοποιείται μακρά ή σύντομη σύνταξη:
$ set -o errunset
$ set -e
Το αποτέλεσμα είναι το ίδιο.
Για να απενεργοποιήσετε την επιλογή, πρέπει να βάλετε ένα συν αντί για ένα μείον:
$ set +e
Για πολύ καιρό δεν μπορούσα να θυμηθώ αυτή τη σύνταξη επειδή η λογική φαινόταν λάθος (ένα σύμβολο μείον ενεργοποιεί την επιλογή και ένα σύμβολο συν την απενεργοποιεί).
В shopt
Οι (πιο λογικές) σημαίες χρησιμοποιούνται για την ενεργοποίηση και απενεργοποίηση επιλογών -s
(σετ) και -u
(μη καθορισμένο):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off
Αλλαγή καταλόγων
Υπάρχουν πολλές επιλογές που σας βοηθούν να εργαστείτε με καταλόγους.
1.cdspell
Με αυτήν τη ρύθμιση, το bash θα αρχίσει να κατανοεί τα τυπογραφικά λάθη και θα σας μεταφέρει στον φάκελο του οποίου το όνομα γράψατε λάθος.
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..
Χρησιμοποιώ αυτή την επιλογή εδώ και πολλά χρόνια και πολύ σπάνια (ίσως μια φορά το χρόνο) παίρνει μια πολύ περίεργη απόφαση. Άλλες μέρες όμως cdspell
εξοικονομεί χρόνο, κυριολεκτικά κάθε μέρα.
2. αυτόματο
Εάν δεν είστε διατεθειμένοι να αποδεχτείτε την αναποτελεσματικότητα των πολλαπλών καταχωρήσεων cd
, τότε μπορείτε να ρυθμίσετε αυτήν την επιλογή ώστε να μετακινείται στο φάκελο X εάν δεν υπάρχει η εντολή X.
$ shopt -s autocd
$ abcdefg
$ cd ..
Σε συνδυασμό με την αυτόματη συμπλήρωση, αυτό σας επιτρέπει να μεταπηδάτε γρήγορα μεταξύ φακέλων:
$ ./abc[TAB][RETURN]
cd -- ./abcdefg
Απλώς μην ονομάσετε το φάκελο rm -rf *
(ναι, παρεμπιπτόντως, αυτό είναι δυνατό).
3.διεύρυνση
Αυτή είναι μια ωραία επιλογή που επεκτείνει τις μεταβλητές περιβάλλοντος πατώντας Tab:
$ shopt -s direxpand
$ ./[TAB] # заменяется на...
$ /full/path/to/current_working_folder
$ ~/[TAB] # заменяется на...
$ /full/path/to/home/folder
$ $HOME/[TAB] # заменяется на...
$ /full/path/to/home/folder
καθαρή απόδοση
4. εργασίες ελέγχου
Αυτή η επιλογή σταματά την αποσύνδεση από τη συνεδρία εάν υπάρχουν ακόμα εργασίες που εκτελούνται στο παρασκήνιο.
Αντί για έξοδο, εμφανίζεται μια λίστα με ημιτελείς εργασίες. Εάν εξακολουθείτε να θέλετε να βγείτε, τότε μπείτε ξανά exit
.
$ shopt -s checkjobs
$ echo $$
68125 # <= ID процесса для оболочки
$ sleep 999 &
$ exit
There are running jobs.
[1]+ Running sleep 999 &
$ echo $$
68125 # <= ID процесса для оболочки тот же
$ exit
There are running jobs.
[1]+ Running sleep 999 &
$ exit
$ echo $$
$ 59316 # <= на этот раз ID процесса изменился
Υπερδυνάμεις αντικατάστασης
5.globstar
Αυτή η επιλογή σας δίνει υπερδυνάμεις αντικατάστασης! Εάν εισάγετε:
$ shopt -s globstar
$ ls **
τότε το κέλυφος θα εμφανίσει όλους τους καταλόγους και τους υποκαταλόγους αναδρομικά.
Σε συνδυασμό με direxpand
Μπορείτε να δείτε γρήγορα τα πάντα χαμηλότερα στην ιεραρχία:
$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n)
6.extglob
Αυτή η επιλογή ενεργοποιεί λειτουργίες που συνδέονται συχνότερα με κανονικές εκφράσεις. Μερικές φορές αυτό είναι πολύ χρήσιμο:
$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile
Εδώ τα μοτίβα τοποθετούνται σε παρένθεση και χωρίζονται με κάθετη μπάρα. Εδώ είναι οι διαθέσιμοι χειριστές:
? = ταιριάζει με μηδέν ή μία εμφάνιση των δεδομένων μοτίβων ! = εμφανίστε όλα όσα δεν ταιριάζουν με τα δεδομένα μοτίβα * = μηδέν ή περισσότερες εμφανίσεις + = μία ή περισσότερες εμφανίσεις @ = ακριβώς μία εμφάνιση
Προστασία από ατυχήματα
7. histverify
Μπορεί να είναι λίγο τρομακτικό στην αρχή να χρησιμοποιείτε τις εντολές γρήγορης εκκίνησης από το ιστορικό των συντομογραφιών !!
и !$
.
Επιλογή histverify
σας επιτρέπει να δείτε πρώτα πώς το Bash ερμηνεύει την εντολή πριν εκτελεστεί πραγματικά:
$ shopt -s histverify
$ echo !$ # <= По нажатию Enter команда не запускается
$ echo histverify # <= Она сначала демонстрируется на экране,
histverify # <= а потом запускается
8. Noclobber
Και πάλι, για προστασία από ατυχήματα, δηλαδή από την αντικατάσταση ενός αρχείου που υπάρχει ήδη με τον τελεστή ανακατεύθυνσης (>
). Αυτό μπορεί να είναι καταστροφή αν δεν έχετε αντίγραφο ασφαλείας.
Επιλογή set -С
απαγορεύει μια τέτοια αντικατάσταση. Εάν είναι απαραίτητο, μπορείτε να παρακάμψετε την προστασία χρησιμοποιώντας το χειριστή >|
:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$
Πηγή: www.habr.com