Ho visto in diversi punti, compresi i consigli su questo sito ( qual è il Bash shebang preferito? ), Da usare #!/usr/bin/env bashin preferenza #!/bin/bash. Ho anche visto un individuo intraprendente suggerire che l'uso #!/bin/bashfosse 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 bashrispetto alle alternative e, supponendo che la portabilità fosse una preoccupazione, c'è qualche motivo per usarne la funzionalità?
envpotrebbe 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à.
/etco /bin/sh. bashè un componente aggiuntivo per la maggior parte dei sistemi simili a Unix. È solo Linux dove bashè garantito che si trovi /bine 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/bashOpenBSD non è installato nulla . Un colpo di #!/bin/basherrore di volontà, e #!/usr/bin/env bashavrà successo.