
Quando stai creando un nuovo script di shell, vuoi assicurarti che sia il più privo di problemi possibile, ma a volte può essere un po 'confuso sapere quale shebang è la migliore da usare. In tale nota, il post di domande e risposte di SuperUser di oggi ha la risposta alla domanda di un lettore confuso.
La sessione di domande e risposte di oggi ci viene fornita da SuperUser, una suddivisione di Stack Exchange, un raggruppamento di siti Web di domande e risposte guidato dalla community.
La domanda
Il lettore SuperUser Hendre vuole sapere quando è meglio usarlo #! / Bin / bash invece di #! / Bin / sh negli script shell:
Quando è più appropriato usare #! / Bin / bash piuttosto che #! / Bin / sh in uno script di shell?
Quando è meglio usare #! / Bin / bash invece di #! / Bin / sh in uno script di shell?
La risposta
Il collaboratore di SuperUser grawity ha la risposta per noi:
In breve:
- Esistono diverse shell che implementano un superset della specifica sh POSIX. Su diversi sistemi, / Bin / sh potrebbe essere un collegamento a ash, bash, dash, ksh, zsh, ecc. Tuttavia sarà sempre sh-compatibile, mai csh o fish.
- Finché ti attieni solo alle funzioni sh, puoi (e probabilmente dovresti anche) usarlo #! / Bin / sh e la sceneggiatura dovrebbe funzionare bene, indipendentemente dalla shell.
- Se si inizia a utilizzare funzionalità specifiche di bash (ad es. Array), è necessario richiedere bash perché, anche se / Bin / sh invoca già bash sul tuo sistema, potrebbe non essere sul sistema di tutti gli altri e il tuo script non verrà eseguito lì. Lo stesso vale per zsh e ksh, ovviamente.
- Anche se lo script è solo per uso personale, potresti notare che alcuni sistemi operativi cambiano / Bin / sh durante gli aggiornamenti. Ad esempio, su Debian era bash, ma in seguito è stato sostituito con un trattino minimale. Script che utilizzavano basismi ma che avevano #! / Bin / sh improvvisamente si è rotto.
Tuttavia:
- Anche #! / Bin / bash non è corretto. Su sistemi diversi, potrebbe esistere bash / Usr / bin, / Usr / pkg / bin, o / Usr / local / bin.
- Un'opzione più affidabile è #! / usr / bin / env bash, che utilizza $ PATH. Anche se lo stesso strumento env non è strettamente garantito, / Usr / bin / env funziona ancora su più sistemi di / Bin / bash lo fa.
Hai qualcosa da aggiungere alla spiegazione? Audio disattivato nei commenti. Vuoi leggere altre risposte da altri utenti esperti di Stack Exchange? Dai un'occhiata al thread completo di discussione qui.
Credito di immagine: Wikipedia
