2012-01-08 12 views
16

Qual è l'uso/significato di "#!/bin/sh" nello script di shell? Per favore fatemi sapere se è considerato nella sceneggiatura o meno come viene commentato.Qual è l'uso/significato di "#!/Bin/sh" nello script di shell?

+0

Vedi: https://en.wikipedia.org/wiki/Shebang_%28Unix%29 –

+5

possibile duplicato di [Cosa fa la linea "#!/bin/sh" significa in uno script di shell UNIX?] (http://stackoverflow.com/questions/7366775/what-does-the-line-bin-sh-mean-in-a-unix -shell-script) –

+0

http://theunixshell.blogspot.com/search/label/shebang – Vijay

risposta

1

È il percorso in cui si trova il file eseguibile della shell.

20

Lo sha-bang (#!) [1] all'inizio di uno script indica al sistema che questo file è un insieme di comandi da inviare all'interprete dei comandi indicato. Il #! è in realtà un numero magico di due byte [2], un indicatore speciale che designa un tipo di file, o in questo caso uno script di shell eseguibile (digitare man magic per maggiori dettagli su questo argomento affascinante). Subito dopo lo sha-bang è un nome di percorso. Questo è il percorso del programma che interpreta i comandi nello script, che si tratti di una shell, di un linguaggio di programmazione o di un'utilità. Questo interprete di comandi esegue quindi i comandi nello script, iniziando dall'alto (la riga che segue la linea sha-bang) e ignorando i commenti.

Fonte [3]: http://tldp.org/LDP/abs/html/sha-bang.html#MAGNUMREF

0

E 'utilizzato dal sistema operativo per i file normali che hanno il set di bit di esecuzione. Se il file non è riconosciuto come un formato "puro" binario (cioè, ELF, o un nano, o altro), i tentativi del sistema operativo e legge #!/path/to/interpreter -plus -options e trasforma:

myscript myargument 

in:

Dispone inoltre che argc e argv siano corretti (cioè, argv [0] sarà il nome dello script e argv [1] l'opzione 1 ecc.).

Questo funziona anche per script Perl, script Python e quant'altro. In effetti, per qualsiasi interprete di tua scelta.

0

significa script verrà eseguito in modalità di compatibilità (POSIX) quando eseguito direttamente (even if /bin/sh is an alias to bash)


citazioni per i downvoters:

La shell Bourne, o sh, sia la shell Unix di default di Unix Versione 7 e la maggior parte dei sistemi Unix continuano ad avere/bin/sh - che sarà la shell Bourne, o un link simbolico o hard link a una shell compatibile - anche quando shell più moderne sono usate dalla maggior parte degli utenti .

http://en.wikipedia.org/wiki//bin/sh

e:

script shell scritto con caratteristiche (bashismi) Bash-specifico non funzionerà in un sistema che utilizza la shell Bourne o uno dei suoi sostituti, a meno Bash è anche installato e lo script inizia con una "riga di shebang" della direttiva interprete #!/bin/bash invece di #!/bin/sh.

http://en.wikipedia.org/wiki/Bash_(Unix_shell)#Portability

+0

Non ha nulla a che fare con la modalità di compatibilità. Questa è una caratteristica bash, non #! genericamente –

+0

si sbaglia, '/ bin/sh' non è in realtà la shell Bourne-sh nei sistemi POSIX-compatibili significa" qualsiasi shell compilatrice POSIX "e fa parte delle specifiche, quando lo si utilizza si è indicando che stai scrivendo il codice POSIX-sh indipendentemente dalla shell utilizzata perché nel caso di bash viene eseguito in modalità di compatibilità (altre shell potrebbero comportarsi diversamente ma l'unica certezza di quello shebang è che hai e fai POSIX). –

+0

Hai fornito due virgolette, senza fare riferimento a uno standard POSIX. Il primo link dice semplicemente che Bash diventa compatibile con POSIX se usato con #!/Bin/sh. Quindi direi che è ancora una caratteristica di base che stai descrivendo, e in realtà niente di generico su #!/Bin/sh –

1

uno script può specificare #!/Bin/bash sulla prima linea, il che significa che lo script deve essere sempre eseguito con bash, piuttosto che un altro shell./bin/sh è un eseguibile che rappresenta la shell di sistema.In realtà, di solito viene implementato come collegamento simbolico che punta all'eseguibile per qualsiasi shell è la shell di sistema

Problemi correlati