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.