In genere, gli script di shell contengono il seguente commento nella prima riga del file di script:#!/bin/sh . Secondo le ricerche che ho fatto, questo si chiama "hash bang" ed è un commento convenzionale. Questo commento informa Unix che questo file viene eseguito dalla Bourne Shell nella directory /bin .
La mia domanda inizia in quel punto. Finora non ho visto questo commento come #!/bin/bash . È sempre #!/bin/sh . Tuttavia, le distribuzioni Ubuntu non hanno il programma Bourne Shell. Hanno la Bourne Again Shell (bash).
A questo punto, è corretto inserire il commento #!/bin/sh negli script di shell scritti nelle distribuzioni Ubuntu?
Risposta accettata:
#!/bin/sh dovrebbe funzionare su tutte le distribuzioni Unix e simili a Unix. È generalmente considerato l'hashbang più portatile purché lo script sia mantenuto conforme a POSIX. Il /bin/sh shell dovrebbe essere una shell che implementa lo standard della shell POSIX, indipendentemente da quale sia la shell effettiva che si maschera da /bin/sh guscio.
#!/bin/sh normalmente è solo un collegamento ora poiché la shell Bourne non è più mantenuta. Su molti sistemi Unix /bin/sh sarà un link a /bin/ksh o /bin/ash , su molti sistemi Linux basati su RHEL sarà un collegamento a /bin/bash , tuttavia su Ubuntu e molti sistemi basati su Debian è un collegamento a /bin/dash . Tutte le shell, quando invocate come sh , entrerà in modalità compatibilità POSIX.
L'hashbang è un segnaposto importante perché consente una portabilità molto maggiore rispetto ad altri metodi, purché lo script sia rigorosamente conforme a POSIX (ripetuto per sottolineare l'importanza).
Nota:quando bash viene invocato in modalità POSIX consentirà comunque alcune cose non POSIX come [[ , array e altro. Queste cose potrebbero fallire su un non bash sistema.