Introduzione

Se stai imparando gli script Bash leggendo il codice di altre persone potresti aver notato che la prima riga negli script inizia con i caratteri #! e il percorso dell'interprete Bash.

Questa sequenza di caratteri ( #! ) si chiama shebang e viene utilizzata per indicare al sistema operativo quale interprete utilizzare per analizzare il resto del file.

Direttiva sull'interprete di Shebang

La direttiva sull'interprete Shebang ha la seguente forma:

#!interpreter [arguments]
  • La direttiva deve essere la prima riga dello script.
  • La direttiva deve iniziare con Shebang #!.
  • Lo spazio bianco dopo il carattere shebang è facoltativo.
  • Interpreter è il percorso completo di un file binario (es: /bin/sh, /bin/bash).
  • Gli argomenti dell'interprete sono opzionali.

Esempi:

  • !/bin/bash - Utilizza bash per analizzare il file.
  • !/usr/bin/env perl - Utilizza il comando env per trovare il percorso dell'eseguibile perl.
  • !/usr/bin/python - Esegue il file usando il binario python.

Utilizzo di Shebang negli script Bash

Se non viene specificato uno shebang e l'utente che esegue lo script Bash utilizza un'altra shell, lo script verrà analizzato da qualunque interprete predefinito venga utilizzato da quella shell. Ad esempio, l'interprete predefinito per bash è bash e per zsh è sh. Per assicurarti che il tuo script venga sempre interpretato con Bash dovrai specificare il percorso eseguibile usando shebang.

Esistono due modi per utilizzare la direttiva Shebang e impostare l'interprete.

Usando il percorso assoluto del binario bash:

#!/bin/bash

Utilizzando l'utilità env:

#!/usr/bin/env bash

Il vantaggio di utilizzare il secondo approccio è che cercherà l'eseguibile bash nella variabile $PATH ambientale dell'utente . Se sono presenti più percorsi bash, il primo verrà utilizzato dallo script.

Quando si utilizza la prima opzione per aggiungere un flag alla sintassi della shell Bash, passarla all'interprete. Ad esempio, per eseguire lo script in una modalità di debug si utilizzerà !/bin/bash -x . Se si utilizza il metodo env, è necessario utilizzare set per dichiarare l'opzione. Per abilitare la modalità debug aggiungere set -x dopo la riga shebang.

Script di esempio

Creiamo un semplice script usando shebang che stamperà "Hello, World".

Apri il tuo editor di testo e incolla la seguente riga:

nano hello_world
#!/bin/bash

echo "Hello, World"

Per poter eseguire lo script senza specificare l'interprete dalla riga di comando, è necessario rendere eseguibile il file:

chmod +x hello_world

Ora puoi eseguire lo script digitando ./ seguito dal nome dello script:

./hello_world
Hello, World

Sovrascrivere Shebang

Se per qualche motivo vuoi sovrascrivere l'interprete impostato nella riga Shebang devi eseguire lo script specificando esplicitamente la shell desiderata.

Ad esempio, per eseguire uno script che ha specificato !/bin/sh nella riga Shebang utilizzando la shell bash, digitare:

bash hello_world

Nota: non è una buona idea sovrascrivere l'interprete della shell in quanto potrebbe comportare un comportamento imprevisto dello script.

Conclusione

Ormai dovresti avere una buona conoscenza di cosa sia Shebang e di come usarlo nei tuoi script Bash.