Όταν είναι καλύτερο να χρησιμοποιείτε #! / Bin / bash Αντί #! / Bin / sh σε ένα Shell Script;
Όταν δημιουργείτε ένα νέο σενάριο κελύφους, θέλετε να βεβαιωθείτε ότι είναι όσο το δυνατόν πιο ελεύθερο, αλλά μερικές φορές μπορεί να είναι λίγο συγκεχυμένο να γνωρίζετε ποια shebang είναι η καλύτερη για εσάς να χρησιμοποιήσετε. Σε αυτό το σημείωμα, η σημερινή θέση SuperUser Q & A έχει την απάντηση σε μια ερώτηση σύγχυσης του αναγνώστη.
Η σημερινή συνάντηση ερωτήσεων και απαντήσεων έρχεται σε επαφή με το SuperUser - μια υποδιαίρεση του Stack Exchange, μια κοινότητα που κατευθύνεται από τους ιστότοπους ερωτήσεων & απαντήσεων.
Το ερώτημα
Ο αναγνώστης SuperUser Hendre θέλει να μάθει πότε είναι καλύτερο να το χρησιμοποιήσει #! / bin / bash αντί #! / bin / sh σε σενάρια κελύφους:
Πότε είναι πιο κατάλληλη η χρήση #! / bin / bash προκειμένου #! / bin / sh σε ένα σενάριο κελύφους?
Πότε είναι καλύτερο να το χρησιμοποιήσετε #! / bin / bash αντί #! / bin / sh σε ένα σενάριο κελύφους?
Η απάντηση
Το Grawity Συνεργάτη SuperUser έχει την απάντηση για εμάς:
Εν συντομία:
- Υπάρχουν πολλά κελύφη τα οποία εφαρμόζουν ένα υπερσύνολο της προδιαγραφής POSIX sh. Σε διαφορετικά συστήματα, / bin / sh μπορεί να είναι μια σύνδεση με τέφρα, bash, dash, ksh, zsh, κλπ. Θα είναι πάντα sh-συμβατό όμως, ποτέ csh ή ψάρια.
- Εφ 'όσον επιμένετε στα χαρακτηριστικά sh μόνο, μπορείτε (και μάλλον θα πρέπει) να χρησιμοποιήσετε #! / bin / sh και το σενάριο πρέπει να δουλεύει καλά, ανεξάρτητα από το κέλυφος που είναι.
- Εάν αρχίσετε να χρησιμοποιείτε χαρακτηριστικά ειδικά για bash (δηλ. Πίνακες), θα πρέπει να ζητήσετε συγκεκριμένα bash επειδή, ακόμα και αν / bin / sh ήδη επικαλείται bash στο σύστημά σας, μπορεί να μην είναι στο σύστημα όλων των άλλων, και το σενάριό σας δεν θα τρέξει εκεί. Το ίδιο ισχύει για το zsh και το ksh, φυσικά.
- Ακόμη και αν το σενάριο χρησιμοποιείται μόνο για προσωπική χρήση, μπορεί να παρατηρήσετε ότι κάποια λειτουργικά συστήματα αλλάζουν / bin / sh κατά τις αναβαθμίσεις. Για παράδειγμα, στο Debian παλαιότερα, αλλά αργότερα αντικαταστάθηκε με την πολύ ελάχιστη παύλα. Σενάρια που χρησιμοποίησαν bashisms αλλά είχαν #! / bin / sh ξαφνικά έσπασε.
Ωστόσο:
- Ακόμη και #! / bin / bash δεν είναι σωστό. Σε διαφορετικά συστήματα, το bash μπορεί να ζει / usr / bin, / usr / pkg / bin, ή / usr / local / bin.
- Μια πιο αξιόπιστη επιλογή είναι #! / usr / bin / env bash, που χρησιμοποιεί $ PATH. Αν και το ίδιο το εργαλείο env δεν είναι απολύτως εγγυημένο, / usr / bin / env εξακολουθεί να λειτουργεί σε περισσότερα συστήματα από / bin / bash κάνει.
Έχετε κάτι να προσθέσετε στην εξήγηση; Απενεργοποιήστε τα σχόλια. Θέλετε να διαβάσετε περισσότερες απαντήσεις από άλλους τεχνολογικούς χρήστες Stack Exchange; Δείτε το πλήρες νήμα συζήτησης εδώ.
Image Credit: Wikipedia