30Jul
Quando si sta creando un nuovo script di shell, si desidera assicurarsi che sia il più privo di problemi possibile, ma a volte può essere un po 'di confusione sapere quale shebang è il migliore da usare. Su questa nota, il post di Q & A di SuperUser di oggi ha la risposta alla domanda di un lettore confuso.
Today's Question &La sessione di risposta ci viene fornita per gentile concessione di SuperUser, una suddivisione di Stack Exchange, un raggruppamento di Q & A basato su community.
La domanda
SuperUser reader Hendre vuole sapere quando è meglio usare #!/bin/ bash invece di #!/bin/ sh negli script di 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
SuperUser contributor 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. Sarà sempre sh-compatibile però, mai csh o fish.
- Fintanto che si attaccano solo le funzionalità di sh, è possibile( e probabilmente dovrebbe anche) usare #!/bin/ sh e lo script dovrebbe funzionare bene, non importa quale shell sia.
- Se si inizia ad utilizzare le funzionalità specifiche di bash( cioè gli array), si dovrebbe richiedere specificatamente bash perché, anche se /bin/ sh invoca già bash sul proprio sistema, potrebbe non sul sistema di tutti gli altri e lo script non verrà eseguito lì.Lo stesso vale per zsh e ksh, ovviamente.
- Anche se lo script è solo per uso personale, si potrebbe notare che alcuni sistemi operativi modificano /bin/ sh durante gli aggiornamenti. Ad esempio, su Debian era bash, ma in seguito è stato sostituito con il trattino molto minimale. Script che usavano i bashismi ma avevano #!/bin/ sh improvvisamente rotto.
Tuttavia:
- Anche #!/bin/ bash non è quella corretta. Su diversi sistemi, bash potrebbe vivere in /usr/ bin , /usr/pkg/ bin o /usr/local/ bin .
- Un'opzione più affidabile è #!/usr/bin/ env bash , che utilizza $ PATH .Sebbene lo strumento env stesso non sia strettamente garantito, /usr/bin/ env funziona ancora su più sistemi di /bin/ bash .
Hai qualcosa da aggiungere alla spiegazione? Audio disattivato nei commenti. Vuoi leggere più risposte dagli altri utenti di Stack Exchange esperti di tecnologia? Controlla la discussione completa qui. Credito immagine
: Wikipedia