Οκτώ ελάχιστα γνωστές επιλογές Bash

Ορισμένες επιλογές του 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

Προσθέστε ένα σχόλιο