Correlati: quale interprete shell esegue uno script senza shebang?
Lo script non ha un shebang / hashbang / #!
line, semplicemente perché non c'è un doppio trattino #!
.
Tuttavia, lo script verrà eseguito da una shell (vedi sopra domande e risposte collegate) e in quella shell, se -
è un carattere valido nel nome di una funzione, la riga dichiara una funzione di shell chiamata --
che non fa nulla (beh, viene eseguita :
, che non fa nulla ) e che non viene mai chiamato.
La funzione, nella più comune notazione multilinea (solo per rendere più ovvio come appare, dato che il suo strano nome in qualche modo oscura il fatto che in realtà è una funzione):
-- () {
:
}
L'unico scopo della definizione della funzione è di avere una riga valida in uno script di shell e allo stesso tempo un comando SQL valido (un commento). Questo tipo di codice è chiamato poliglotta .
Dopo aver dichiarato la funzione di shell fasulla, lo script, quando eseguito da un interprete di script di shell, utilizza exec
per sostituire la shell corrente con il processo risultante dall'esecuzione db2 -txf "$0"
, che sarebbe lo stesso che usare db2 -txf
sul percorso dello script dalla riga di comando.
Questo trucco probabilmente non funzionerebbe in modo affidabile su sistemi in cui dash
o con ash
shell basate su altri yash
, la shell Bourne, ksh88
o ksh93
viene utilizzato come /bin/sh
, poiché queste shell non accettano funzioni il cui nome contiene trattini.
Correlati anche:
Suppongo che funzionerebbe anche quanto segue (non realmente testato):
--() { exec db2 -txf "$0"; }; --