Homepage » come » Quando è meglio usare #! / Bin / bash Invece di #! / Bin / sh in uno script di shell?

    Quando è meglio usare #! / Bin / bash Invece di #! / Bin / sh in uno script di shell?

    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.

    La sessione di domande e risposte di oggi ci viene fornita per gentile concessione di SuperUser, una suddivisione di Stack Exchange, un raggruppamento di siti Web di domande e risposte basato sulla comunità.

    La domanda

    Il lettore SuperUser Hendre vuole sapere quando è meglio usarlo #! / Bin / bash invece di #! / Bin / sh negli script di shell:

    Quando è più appropriato da 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 contributo di SuperUser grawity ha la risposta per noi:

    In breve:

    • Esistono diverse shell che implementano un superset delle specifiche POSIX sh. 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.
    • Finché resterai fedele solo alle funzionalità di SH, puoi (e probabilmente dovresti anche) usarlo #! / Bin / sh e lo script dovrebbe funzionare bene, non importa quale shell sia.
    • Se inizi a utilizzare le funzionalità specifiche di bash (cioè gli array), dovresti richiedere specificatamente bash perché, anche se / Bin / sh invoca già bash sul tuo sistema, potrebbe non 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 il trattino molto minimale. Script che usavano i bashismi ma che avevano #! / Bin / sh improvvisamente rotto.

    Però:

    • Anche #! / Bin / bash non è corretto 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 usa $ PATH. Sebbene lo strumento env stesso non sia strettamente garantito, / Usr / bin / env funziona ancora su più sistemi di / Bin / bash fa.

    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 d'immagine: Wikipedia