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?
risposta
È il percorso in cui si trova il file eseguibile della shell.
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
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.
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.
Non ha nulla a che fare con la modalità di compatibilità. Questa è una caratteristica bash, non #! genericamente –
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). –
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 –
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
- 1. Qual è la differenza tra $ @ e $ * nello script di shell?
- 2. Rileva presenza di contenuto di stdin nello script di shell
- 3. Come ottenere l'estensione di un file nello script di shell
- 4. Registrazione di prefissi con la data nello script di shell
- 5. esportazione non funziona nello script shell
- 6. Elaborazione o threading parallelo nello script Shell
- 7. Controllare l'output di un comando nello script di shell
- 8. argomento di passaggio che contiene spazio nello script di shell
- 9. Esegui un singolo comando nello script di shell senza sudo
- 10. se istruzione per controllare $ HOSTNAME nello script di shell
- 11. Aggiungere contenuto di utilizzo nello script della shell senza getopts
- 12. argomento non valido per l'opzione '-resize' nello script di shell
- 13. Condizioni multiple nello script della shell di istruzioni if
- 14. Che cosa $? $ 0 $ 1 $ 2 significa nello script di shell?
- 15. SSH: non richiede la password nello script di shell
- 16. Crea o variabili di shell nello script Linker
- 17. come manipolare la matrice nello script di shell
- 18. Tempo di incremento (minuti e secondi) nello script bash/shell
- 19. Modifica per utente root nello script di shell
- 20. Operazione temporanea in una directory temporanea nello script di shell
- 21. Come recuperare tutti gli strumenti utilizzati nello script di shell
- 22. Una riga if/else condition nello script di shell linux
- 23. come leggere un singolo carattere nello script di shell
- 24. Parsing JSON nello script di shell con regex
- 25. L'impostazione della variabile di ambiente nello script di shell non lo rende visibile alla shell
- 26. Che cos'è usage() nello scripting di shell?
- 27. l'ordinamento in script di shell
- 28. script di shell: if
- 29. Shell array di script
- 30. Acquisizione del nome del fuso orario Canonical nello script shell
Vedi: https://en.wikipedia.org/wiki/Shebang_%28Unix%29 –
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) –
http://theunixshell.blogspot.com/search/label/shebang – Vijay