Bash
Script shebang
Ricerca…
Sintassi
Usa
/bin/bash
come interprete bash:#! / Bin / bash
Cerca l'interprete bash nella variabile d'ambiente
PATH
conenv
eseguibile:#! / usr / bin / env bash
Osservazioni
Un errore comune è provare ad eseguire file di script \r\n
formattati in end-line di Windows su sistemi UNIX / Linux, in questo caso l'interprete di script usato nello shebang è:
/bin/bash\r
Ed è ignaro non trovato ma può essere difficile da capire.
Shebang diretto
Per eseguire un file di script con l'interprete bash
, la prima riga di un file di script deve indicare il percorso assoluto dell'eseguibile bash
da utilizzare:
#!/bin/bash
Il percorso bash
in shebang viene risolto e utilizzato solo se uno script viene avviato direttamente in questo modo:
./script.sh
Lo script deve avere il permesso di esecuzione.
Lo shebang viene ignorato quando un interprete bash
viene esplicitamente indicato per eseguire uno script:
bash script.sh
Env shebang
Per eseguire un file di script con l'eseguibile bash
trovato nella variabile d'ambiente PATH
utilizzando l' env
eseguibile, la prima riga di un file di script deve indicare il percorso assoluto dell'eseguibile env
con l'argomento bash
:
#!/usr/bin/env bash
Il percorso env
nello shebang viene risolto e utilizzato solo se uno script viene avviato direttamente in questo modo:
script.sh
Lo script deve avere il permesso di esecuzione.
Lo shebang viene ignorato quando un interprete bash
viene esplicitamente indicato per eseguire uno script:
bash script.sh
Altri shebang
Ci sono due tipi di programmi che il kernel conosce. Un programma binario è identificato dalla sua intestazione ELF ( E xtenable L oadable F ormat), che di solito è prodotta da un compilatore. Il secondo sono script di qualsiasi tipo.
Se un file inizia nella prima riga con la sequenza #! quindi la stringa successiva deve essere un percorso di un interprete. Se il kernel legge questa linea, chiama l'interprete chiamato da questo percorso e fornisce tutte le seguenti parole in questa riga come argomenti all'interprete. Se non c'è nessun file chiamato "qualcosa" o "sbagliato":
#!/bin/bash something wrong
echo "This line never gets printed"
bash prova ad eseguire il suo argomento "qualcosa di sbagliato" che non esiste. Anche il nome del file di script è stato aggiunto. Per vederlo chiaramente usa un echo shebang:
#"/bin/echo something wrong
# and now call this script named "thisscript" like so:
# thisscript one two
# the output will be:
something wrong ./thisscript one two
Alcuni programmi come awk usano questa tecnica per eseguire script più lunghi che risiedono in un file su disco.