Υπάρχει κάποιο είδος "Bash" αντικειμενικά καλύτερο από τα άλλα για τις περισσότερες χρήσεις;
#!/usr/bin/env bash
#!/bin/bash
#!/bin/sh
#!/bin/sh -
Θυμάμαι αμυδρά ότι πριν από πολύ καιρό άκουσα ότι η προσθήκη μιας παύλας στο τέλος εμποδίζει κάποιον να περάσει μια εντολή στο σενάριό σας, αλλά δεν μπορώ να βρω λεπτομέρειες σχετικά με αυτό.
Θα πρέπει να χρησιμοποιείτε #!/usr/bin/env bash
για φορητότητα: διαφορετικά *nix βάζουν τον bash
σε διαφορετικά σημεία, και η χρήση του /usr/bin/env
είναι μια λύση για να τρέξετε τον πρώτο bash
που θα βρείτε στο PATH
. Και Η sh
δεν είναι bash
.
Το /bin/sh
είναι συνήθως ένας σύνδεσμος προς το προεπιλεγμένο κέλυφος του συστήματος, το οποίο συχνά είναι το bash
αλλά, π.χ., στα συστήματα Debian είναι το ελαφρύτερο dash
. Όπως και να έχει, το αρχικό Bourne shell είναι το sh
, οπότε αν το σενάριό σας χρησιμοποιεί κάποια ειδικά χαρακτηριστικά του bash
(2ης γενιάς, "Bourne Again sh") ([[ ]]
δοκιμές, πίνακες, διάφορα γλυκά πράγματα, κλπ.), τότε θα πρέπει να είστε πιο συγκεκριμένοι και να χρησιμοποιήσετε το τελευταίο. Με αυτόν τον τρόπο, σε συστήματα όπου δεν είναι εγκατεστημένο το bash, το σενάριό σας δεν θα τρέξει. Καταλαβαίνω ότι μπορεί να υπάρχει μια συναρπαστική τριλογία ταινιών σχετικά με αυτή την εξέλιξη... αλλά αυτό μπορεί να είναι φήμες.
Σημειώστε επίσης ότι όταν προκαλείται ως sh
, το bash
σε κάποιο βαθμό συμπεριφέρεται ως το πρότυπο POSIX sh
(δείτε επίσης τα GNU docs σχετικά με αυτό).
Εξαρτάται πραγματικά από το πώς γράφετε τα σενάρια bash. Αν το /bin/sh
σας είναι συνδεδεμένο με το bash, όταν το bash καλείται ως sh
, ορισμένα χαρακτηριστικά δεν είναι διαθέσιμα.
Αν θέλετε ειδικά χαρακτηριστικά του bash, μη-POSIX, χρησιμοποιήστε #!/bin/bash