GNU/Linux >> Linux Esercitazione >  >> Linux

È corretto utilizzare /bin/sh nell'hashbang se Bourne Shell non è disponibile in una distribuzione?

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.


Linux
  1. /usr/bin Vs /usr/local/bin Su Linux?

  2. Qual è la differenza tra /sbin/nologin e /bin/false?

  3. Perché nessuno usa la vera shell Bourne come /bin/sh?

  4. Qual è il motivo per cui uno Shebang punta a /bin/sh piuttosto che a /bin/bash?

  5. Linux – Unire /usr/bin e /usr/sbin in /bin (gnu/linux)?

Cosa fa la riga '!/bin/sh -e'?

Qual è la differenza tra #!/usr/bin/env bash e #!/usr/bin/bash?

cmake --version punta a /usr/bin/cmake mentre which cmake punta a /usr/local/bin

Quando dovrei usare /dev/shm/ e quando dovrei usare /tmp/?

Differenza tra /bin e /usr/bin

#!/bin/sh vs #!/bin/bash per la massima portabilità