Και τα δύο κελύφη προσφέρουν ισχυρές γλώσσες σεναρίου, αλλά δεν είναι απολύτως συμβατά.

Όταν πρόκειται για δέσμες ενεργειών φλοιού σε λειτουργικά συστήματα που μοιάζουν με Unix, κυριαρχούν δύο κελύφη: το Bash (Bourne Again Shell) και το Zsh (Z Shell). Εάν είστε προγραμματιστής ή διαχειριστής συστήματος, η επιλογή μεταξύ αυτών των δύο επηρεάζει σημαντικά την αποτελεσματικότητα και την παραγωγικότητά σας.

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

Τι είναι το Bash και το Zsh;

Το Bash είναι δημοφιλές τόσο σε συστήματα Linux όσο και σε συστήματα macOS. Είναι ένα ισχυρό εργαλείο που μπορείτε να χρησιμοποιήσετε για να αλληλεπιδράσετε με το λειτουργικό σύστημα και να εκτελέσετε εντολές. Μπορείτε επίσης να χρησιμοποιήστε το Bash για δέσμες ενεργειών κελύφους, το οποίο αυτοματοποιεί εργασίες γράφοντας σενάρια που περιέχουν περισσότερες από μία εντολές.

instagram viewer

Το Zsh (Z shell) είναι μια εκτεταμένη έκδοση του Bash που έχει πολλές περισσότερες δυνατότητες. Είναι το προεπιλεγμένο κέλυφος στο macOS. Γίνεται επίσης όλο και πιο δημοφιλές σε συστήματα Linux.

Πώς να αλλάξετε από Bash σε Zsh

Εάν χρησιμοποιείτε σύστημα Linux και θέλετε να μεταβείτε σε Zsh, ξεκινήστε χρησιμοποιώντας το διαχειριστή πακέτων για να το εγκαταστήσετε. Για παράδειγμα, στο Debian ή στο Ubuntu, χρησιμοποιήστε την ακόλουθη εντολή:

sudo apt install zsh

Αφού το εγκαταστήσετε στο σύστημά σας, μεταβείτε σε αυτό εκτελώντας την ακόλουθη εντολή:

chsh -s $(which zsh)

Εάν χρησιμοποιείτε macOS, το Zsh είναι ήδη εγκατεστημένο. Για να μεταβείτε σε αυτό, εκτελέστε την ακόλουθη εντολή:

chsh -s /bin/zsh

Για να επιστρέψετε στο Bash, αντικαταστήστε το Zsh με το Bash στις παραπάνω εντολές.

Για να ελέγξετε ποιο κέλυφος χρησιμοποιείτε, εκτελέστε την ακόλουθη εντολή:

echo $SHELL

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

Διαφορές μεταξύ Zsh και Bash

Υπάρχουν αρκετές διαφορές μεταξύ Zsh και Bash. Η εξέταση αυτών των διαφορών θα σας βοηθήσει να αποφασίσετε ποιο κέλυφος σας ταιριάζει καλύτερα.

1. Άμεση προσαρμογή

Το Zsh προσφέρει έναν ευκολότερο τρόπο για την προσαρμογή των μηνυμάτων σας χρησιμοποιώντας %-βασισμένες σειρές διαφυγής. Αυτό επιτρέπει δυναμικές προτροπές με χρώμα και πληροφορίες. Για να προσαρμόσετε την προτροπή του κελύφους σας, ορίστε το ΥΓ1 (Κύρια προτροπή).

PS1="%F{green}%n@%m %F{blue}%~ %f$ "

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

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

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

PS1="\[\033[32m\]\u@\h \[\033[34m\]\w \[\033[0m\]\$ "

Χρησιμοποιώντας \[\033[0m\] είναι ζωτικής σημασίας, καθώς διασφαλίζει ότι οι αλλαγές χρώματος δεν επηρεάζουν το κείμενο που ακολουθεί την προτροπή.

2. Υποστήριξη για Associative Arrays

Το Zsh υποστηρίζει εγγενώς συσχετιστικούς πίνακες. Αυτοί οι πίνακες παρέχουν έναν βολικό τρόπο συσχέτισης δεδομένων που καθιστά εύκολη την οργάνωση και την ανάκτηση πληροφοριών. Χρήση δηλώνω-ΕΝΑ εντολή για τη ρητή δήλωση ενός συσχετιστικού πίνακα:

# Declare an associative array in Zsh 
declare -A my_assoc_array

Στη συνέχεια, μπορείτε να αντιστοιχίσετε τιμές στον συσχετιστικό πίνακα:

my_assoc_array=(key1 value1 key2 value2) 

Και, τέλος, αποκτήστε πρόσβαση στις τιμές χρησιμοποιώντας τα κλειδιά τους:

echo $my_assoc_array[key1] # Outputs: value1

Το Bash έχει συμπεριλάβει εγγενή υποστήριξη για συσχετιστικούς πίνακες από την έκδοση 4.0. Δηλώνετε και εκχωρείτε τιμές με τον ίδιο τρόπο που θα κάνατε στο Zsh. Αλλά όταν πρόκειται για πρόσβαση σε τιμές πίνακα, πρέπει να τυλίξετε το κλειδί μέσα σε σγουρές αγκύλες:

echo "${my_assoc_array[key1]}" 

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

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

3. Εκτεταμένα Globbing Patterns

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

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

setopt extended_glob
txt_files=(*.txt)

Για να αντιστοιχίσετε όλα τα αρχεία εκτός από αυτά με επέκταση .log:

setopt extended_glob
non_log_files=^(*.log)

Στο Bash, πρέπει να τα ενεργοποιήσετε χρησιμοποιώντας το κατάστημα εντολή με το extglob επιλογή. Για παράδειγμα, για να ταιριάζει με όλα .κείμενο αρχεία στον τρέχοντα κατάλογο:

shopt -s extglob
txt_files=(*.txt)

Για αντιστοίχιση όλων των αρχείων εκτός από αυτά με .κούτσουρο επέκταση:

shopt -s extglob
non_log_files=!(*.log)

Η κύρια διαφορά μεταξύ Zsh και Bash όταν πρόκειται για σφαιρικά μοτίβα είναι η εντολή που χρησιμοποιείται για την ενεργοποίησή τους. Ωστόσο, παρατηρήστε ότι ορισμένοι χειριστές είναι διαφορετικοί μεταξύ των δύο κελύφους.

4. Προηγμένη επέκταση παραμέτρων

Το Zsh υποστηρίζει την έμμεση επέκταση των παραμέτρων. Αυτό σας επιτρέπει να επεκτείνετε την τιμή μιας μεταβλητής της οποίας το όνομα είναι αποθηκευμένο σε μια άλλη μεταβλητή. Για να το πετύχετε αυτό, πρέπει να προσθέσετε ένα θαυμαστικό στο όνομα της μεταβλητής !.

name="foo"
result="${!name}"
echo "$result"

Το Bash από την άλλη πλευρά δεν επιτρέπει την έμμεση επέκταση εγγενώς. Η λύση για αυτό είναι η χρήση του ισοτιμία ενσωματωμένη εντολή ή το ${!var} σύνταξη για έμμεσες αναφορές μεταβλητών.

name="world"
var="name"
echo ${!var} # This will output: world

Ομοιότητες μεταξύ Bash και Zsh

Αν και υπάρχουν διαφορές μεταξύ του Bash και του Zsh, μοιράζονται επίσης ορισμένες ομοιότητες.

1. Σύνταξη γραμμής εντολών

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

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

2. Συνέπεια αντικατάστασης εντολών

Η αντικατάσταση εντολών είναι η διαδικασία ενσωμάτωσης της εξόδου μιας εντολής σε μια άλλη. Είναι συνεπής μεταξύ των δύο κελυφών.

result=$(ls) 

Και στο Bash και στο Zsh, μπορείτε να χρησιμοποιήσετε το $(εντολή) σύνταξη για να αντικαταστήσει την έξοδο μιας εντολής σε μια μεταβλητή. Αυτό επιτρέπει την εύκολη φορητότητα των σεναρίων μεταξύ των δύο κελύφους.

3. Επιλογή εντοπισμού σφαλμάτων σεναρίου

Τόσο το Bash όσο και το Zsh χρησιμοποιούν επισήμανση για εντοπισμό σφαλμάτων σεναρίου. Όταν εκτελείτε ένα σενάριο με αυτήν τη σημαία, εμφανίζει κάθε εντολή πριν εκτελεστεί. Αυτό σας βοηθά να εντοπίσετε προβλήματα στα σενάρια σας.

# Debugging a script in both Bash and Zsh
#!/bin/bash -x

echo "Debugging Bash script"

Σε αυτό το σενάριο του Bash, το Η σημαία επιτρέπει τον εντοπισμό σφαλμάτων. Μπορείτε να χρησιμοποιήσετε μια παρόμοια προσέγγιση στο Zsh. απλά αντικαταστήστε βίαιο χτύπημα με zsh.

Σκέψεις για την επιλογή μεταξύ Zsh και Bash

  • Συμβατότητα και φορητότητα: Το Bash είναι το προεπιλεγμένο κέλυφος σε πολλά συστήματα που βασίζονται σε Unix. Αυτό το καθιστά ασφαλέστερη επιλογή για δέσμες ενεργειών μεταξύ πλατφορμών. Εάν χρειάζεστε τα σενάρια σας να εκτελούνται σε ένα ευρύ φάσμα συστημάτων χωρίς τροποποίηση, το Bash είναι μια καλύτερη επιλογή.
  • Πολυπλοκότητα σεναρίου και προηγμένες δυνατότητες: Το Zsh παρέχει προηγμένες λειτουργίες όπως συσχετιστικούς πίνακες, εκτεταμένα σφαιρικά μοτίβα και προηγμένη επέκταση παραμέτρων. Αυτό απλοποιεί πολύπλοκες εργασίες δέσμης ενεργειών. Εάν τα σενάρια σας απαιτούν προηγμένο χειρισμό συμβολοσειρών ή δομές δεδομένων, το Zsh είναι μια καλύτερη επιλογή.
  • Κοινότητα και οικοσύστημα Plugin: Τόσο το Bash όσο και το Zsh έχουν ενεργές κοινότητες, αλλά το Zsh έχει μια ισχυρότερη κοινότητα και ένα εκτεταμένο οικοσύστημα προσθηκών και θεμάτων. Εάν εκτιμάτε την προσαρμογή, η ζωντανή κοινότητα και η υποστήριξη πρόσθετων του Zsh μπορεί να είναι ένα σημαντικό πλεονέκτημα.
  • Ευκολία μάθησης: Εάν είστε νέοι στο shell scripting, το Bash είναι ένα πιο προσιτό σημείο εκκίνησης. Διαθέτει εκτενή τεκμηρίωση και πόρους διαθέσιμους για αρχάριους. Αυτό διευκολύνει την εκμάθηση των βασικών σεναρίων του κελύφους.

Αυτοματοποίηση εργασιών με χρήση σεναρίων Shell

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

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