2013-05-13 13 views
6

Esempio unoEffetti di commento (#) righe prima e/o dopo il commento simile #!/Bin/linea sh

#!/bin/sh 
# purpose: print out current directory name and contents 
pwd 
ls 

Esempio due

# purpose: print out current directory name and contents 
#!/bin/sh 
pwd 
ls 

Che cosa è la differenza - se faccio la prima riga un commento (#), con #!/bin/sh come seconda riga, cosa succederà?

Che cosa significa #!/bin/sh?

+0

Sarebbe più semplice, se hai circondato gli script con i tag del codice. Il carattere irregolare lo rende davvero confuso ... – user1581900

+0

#!/Bin/sh specifica il percorso della shell da utilizzare per lo script. La domanda simile è stata fornita qui: http: // StackOverflow.it/questions/8967902/why-do-you-need-to-put-bin-bash-al-inizio-di-uno-script-file – user1581900

+2

possibile duplicato ... http: //stackoverflow.com/questions/7366775/what-does-the-line-bin-sh-mean-in-a-unix-shell-script – Peeyush

risposta

2

Normalmente uno script di shell viene eseguito dalla shell predefinita definita nel file/etc/passwd. Ma puoi definire esplicitamente un programma che può eseguire il tuo script.

Unices utilizza un metodo comune per determinare quale programma è necessario per eseguire uno script specifico (uomo execve(2)). Se lo script ha i diritti di esecuzione corretti impostati e in uno script la prima riga inizia con un #! caratteri, verrà eseguito dal programma definito in seguito.

Per esempio, se la prima riga è #!/usr/bin/awk -f poi il resto del file viene passato al programma awk (così si deve usare awk sintassi). O se un Makefile inizia con #!/usr/bin/make -f allora il resto del file verrà passato a make. È possibile avviare lo script come un normale programma e lo script può essere scritto nella sintassi awk o make (o in qualsiasi modo definito).

Se execve non trova #! come i primi due carattere del file, prenderà in considerazione come un normale file di script che verrà eseguito così com'è.

Quindi utilizzando #! È possibile determinare il linguaggio dello script e Non è necessario sapere quale shell viene utilizzata dall'utente che utilizza lo script. In qualsiasi altra riga, #! verrà interpretato come shell predefinita, che di solito è solo una riga di commento.

+0

se faccio un commento (#) in 1a riga dopo #!/Bin/sh nella seconda riga, quindi cosa succederà? – Manikanta

+0

@Manikanta: È una riga di commento in 'sh', quindi verrà saltata. Su una macchina Linux 'ls -l/bin/sh' è un link simbolico a bash. – TrueY

+0

@TrueY '/ bin/sh' non è sicuramente un collegamento a' bash' su tutti i sistemi Linux, ad es. I sistemi basati su Debian sono passati a 'dash' un po 'di tempo fa. Inoltre, non è la shell che cerca il '#!', Il kernel lo fa. –

1

Qual è la differenza tra il 1 ° & 2 script di shell ..?

Nessuna differenza nell'output. Ma il tempo di eseguire entrambi sarà leggermente diverso in quanto l'interprete legge la riga una per una.

se faccio un commento (#) in prima riga dopo #!/Bin/sh in seconda linea, quindi cosa succederà?

Qualsiasi riga iniziata con (#) ad eccezione di shebang (#!) Viene considerata come commento nello script di shell.

che cosa significa #!/Bin/sh?

Suo il percorso (qui -/bin/sh) (! #) Per l'interprete utilizzato dopo la faccenda. Shell proverà ad usare la lingua dell'interprete menzionata dopo lo shebang per eseguire lo script.

+2

Questo non è del tutto corretto. A seconda della shell che viene eseguita in caso di uno shebang mancante, l'output potrebbe differire in base alle caratteristiche della shell in questione (non per questo frammento, ma per qualsiasi scenario reale). Inoltre, di solito non leggono lo script riga per riga, leggono a blocchi. –

+0

Puoi commentare se la linea shebang è onorato nel secondo esempio? In altre parole, è necessario che se si desidera uno shebang ** deve ** essere la prima cosa nel file? Nessun altro commento può venire prima di esso? – FGreg