Επτά απροσδόκητες μεταβλητές Bash

Συνεχίζοντας τη σειρά σημειώσεων για λιγότερο γνωστό λειτουργίες bash, θα σας δείξω επτά μεταβλητές που ίσως δεν γνωρίζετε.

1) PROMPT_COMMAND

Μπορεί να γνωρίζετε ήδη πώς να χειρίζεστε την προτροπή για να εμφανίζονται διάφορες χρήσιμες πληροφορίες, αλλά δεν γνωρίζουν όλοι ότι μπορείτε να εκτελείτε μια εντολή φλοιού κάθε φορά που εμφανίζεται η προτροπή.

Στην πραγματικότητα, πολλοί σύνθετοι χειριστές εντολών χρησιμοποιούν αυτήν τη μεταβλητή για να εκτελέσουν εντολές για τη συλλογή πληροφοριών που εμφανίζονται στη γραμμή εντολών.

Δοκιμάστε να το εκτελέσετε σε νέο κέλυφος και δείτε τι θα συμβεί στην περίοδο λειτουργίας:

$ PROMPT_COMMAND='echo -n "writing the prompt at " && date'

2) HISTTIMEFORMAT

Αν τρέχεις history στην κονσόλα, θα λάβετε μια λίστα με εντολές που είχαν εκτελεστεί στο παρελθόν στο λογαριασμό σας.

$ HISTTIMEFORMAT='I ran this at: %d/%m/%y %T '

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

1871 Έτρεξα αυτό στις: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 Έτρεξα αυτό στις: 01/05/19 13:38:19 curl bbc.co.uk 1873 Έτρεξα αυτό στο : 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 Έτρεξα αυτό στις: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 Έτρεξα αυτό στις: 01 /05/19 13:39:25 sudo su -

Η μορφοποίηση ταιριάζει με χαρακτήρες από man date.

3) CDPATH

Για να εξοικονομήσετε χρόνο στη γραμμή εντολών, μπορείτε να χρησιμοποιήσετε αυτήν τη μεταβλητή για να αλλάζετε καταλόγους τόσο εύκολα όσο εκδίδεις εντολές.

ως PATH, μεταβλητή CDPATH είναι μια λίστα διαδρομών διαχωρισμένη με άνω και κάτω τελεία. Όταν εκτελείτε την εντολή cd με μια σχετική διαδρομή (δηλαδή χωρίς κάθετο), από προεπιλογή το κέλυφος αναζητά στον τοπικό σας φάκελο για ονόματα που ταιριάζουν. CDPATH θα αναζητήσει στα μονοπάτια που δώσατε τον κατάλογο στον οποίο θέλετε να μεταβείτε.

Εάν εγκαταστήσετε CDPATH με αυτόν τον τρόπο:

$ CDPATH=/:/lib

και μετά εισάγετε:

$ cd /home
$ cd tmp

τότε θα καταλήγεις πάντα μέσα /tmp οπου κι αν είσαι.

Ωστόσο, να είστε προσεκτικοί, γιατί αν δεν προσδιορίσετε το τοπικό στη λίστα (.), τότε δεν θα μπορείτε να δημιουργήσετε άλλο φάκελο tmp και πηγαίνετε σε αυτό ως συνήθως:

$ cd /home
$ mkdir tmp
$ cd tmp
$ pwd
/tmp

Ωχ!

Αυτό είναι παρόμοιο με τη σύγχυση που ένιωσα όταν συνειδητοποίησα ότι ο τοπικός φάκελος δεν περιλαμβανόταν στην πιο οικεία μεταβλητή PATH... αλλά πρέπει να το κάνετε στη μεταβλητή PATH γιατί μπορεί να σας εξαπατήσουν να εκτελέσετε μια ψεύτικη εντολή από κάποιο ληφθέν κώδικα.

Το δικό μου ορίζεται από το σημείο εκκίνησης:

CDPATH=.:/space:/etc:/var/lib:/usr/share:/opt

4) SHLVL

Έχετε αναρωτηθεί ποτέ, πληκτρολογώντας exit θα σας μεταφέρει από το τρέχον κέλυφος του bash σε ένα άλλο "γονικό" κέλυφος ή απλά θα κλείσει τελείως το παράθυρο της κονσόλας;

Αυτή η μεταβλητή παρακολουθεί πόσο βαθιά φωλιασμένοι είστε στο κέλυφος του bash. Εάν δημιουργήσετε ένα νέο τερματικό, ορίζεται σε 1:

$ echo $SHLVL
1

Στη συνέχεια, εάν ξεκινήσετε μια άλλη διαδικασία κελύφους, ο αριθμός αυξάνεται:

$ bash
$ echo $SHLVL
2

Αυτό μπορεί να είναι πολύ χρήσιμο σε σενάρια όπου δεν είστε σίγουροι αν πρέπει να βγείτε ή όχι ή να παρακολουθείτε πού βρίσκεστε ένθετα.

5) LINENO

Η μεταβλητή είναι επίσης χρήσιμη για την ανάλυση της τρέχουσας κατάστασης και τον εντοπισμό σφαλμάτων LINENO, το οποίο αναφέρει τον αριθμό των εντολών που έχουν εκτελεστεί στη συνεδρία μέχρι στιγμής:

$ bash
$ echo $LINENO
1
$ echo $LINENO
2

Αυτό χρησιμοποιείται συχνότερα κατά τον εντοπισμό σφαλμάτων σε σενάρια. Εισαγωγή γραμμών όπως echo DEBUG:$LINENO, μπορείτε γρήγορα να προσδιορίσετε πού στο σενάριο βρίσκεστε (ή όχι).

6) REPLY

Εάν, όπως εγώ, συνήθως γράφετε κώδικα ως εξής:

$ read input
echo do something with $input

Μπορεί να αποτελεί έκπληξη το γεγονός ότι δεν χρειάζεται να ανησυχείτε καθόλου για τη δημιουργία της μεταβλητής:

$ read
echo do something with $REPLY

Αυτό κάνει το ίδιο πράγμα.

7) TMOUT

Για να αποφύγετε την υπερβολική παραμονή σε διακομιστές παραγωγής για λόγους ασφαλείας ή την κατά λάθος εκτέλεση κάτι επικίνδυνο σε λάθος τερματικό, η ρύθμιση αυτής της μεταβλητής λειτουργεί ως προστασία.

Εάν δεν εισαχθεί τίποτα για έναν καθορισμένο αριθμό δευτερολέπτων, το κέλυφος εξέρχεται.

Δηλαδή, αυτή είναι μια εναλλακτική sleep 1 && exit:

$ TMOUT=1

Πηγή: www.habr.com

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