30Jul

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.

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