Ho visto in diversi punti, compresi i consigli su questo sito ( qual è il Bash shebang preferito? ), Da usare #!/usr/bin/env bash
in preferenza #!/bin/bash
. Ho anche visto un individuo intraprendente suggerire che l'uso #!/bin/bash
fosse sbagliato e la funzionalità bash si perderebbe così.
Detto questo, utilizzo bash in un ambiente di test strettamente controllato in cui ogni unità in circolazione è essenzialmente un clone di una singola unità master. Comprendo l'argomento della portabilità, sebbene non sia necessariamente applicabile nel mio caso. C'è qualche altro motivo da preferire #!/usr/bin/env bash
rispetto alle alternative e, supponendo che la portabilità fosse una preoccupazione, c'è qualche motivo per usarne la funzionalità?
env
potrebbe non trovarsi in /usr/bin
. I commenti di Shebang sono del tutto una cattiva idea IMHO. Se l'interprete di script predefinito non gestisce i commenti shebang, è solo un commento. Tuttavia, se sai che l'interprete di script è in grado di gestire i commenti shebang e conosci il percorso per bash, non c'è motivo di non invocarlo usando il suo percorso assoluto a meno che il percorso non sia troppo lungo (improbabile), o potresti portarlo su un sistema che non ha bash situato in / bin. Poi di nuovo, le avvertenze che ho menzionato in precedenza si applicano in quel caso poiché comporta la portabilità.
/etc
o /bin/sh
. bash
è un componente aggiuntivo per la maggior parte dei sistemi simili a Unix. È solo Linux dove bash
è garantito che si trovi /bin
e molto probabilmente anche collegato come /bin/sh
. Da quando Linux è diventato il moderno Unix di fatto per molte persone, il fatto che esistano sistemi diversi da Linux è stato dimenticato. Nella mia risposta di seguito ho assunto Linux perché hai detto bash
. Molte delle scatole BSD con cui ho lavorato non lo hanno nemmeno installato.
/bin/bash
. Bash non è installato per impostazione predefinita. Se lo vuoi, devi farlo pkg install bash
. Una volta installato, si trova in /usr/local/bin/bash
. Su /bin/bash
OpenBSD non è installato nulla . Un colpo di #!/bin/bash
errore di volontà, e #!/usr/bin/env bash
avrà successo.