Relacionado: ¿Qué intérprete de shell ejecuta un script sin shebang?
El script no tiene shebang / hashbang / #!
line, simplemente porque no tiene un doble guión #!
.
Sin embargo, el script será ejecutado por un shell (ver preguntas y respuestas vinculadas anteriormente), y en ese shell, si -
es un carácter válido en el nombre de una función, la línea declara una función de shell llamada --
que no hace nada (bueno, se ejecuta :
, que no hace nada ) y que nunca se llama.
La función, en la notación de líneas múltiples más común (solo para que sea más obvio cómo se ve, ya que su nombre extraño oscurece el hecho de que en realidad es una función):
-- () {
:
}
El único propósito de la definición de la función es tener una línea que sea válida en un script de shell y al mismo tiempo un comando SQL válido (un comentario). Este tipo de código se llama políglota .
Después de declarar la función de shell falsa, el script, cuando es ejecutado por un intérprete de script de shell, se usa exec
para reemplazar el shell actual con el proceso resultante de la ejecución db2 -txf "$0"
, que sería lo mismo que usar db2 -txf
en la ruta de acceso del script desde la línea de comandos.
Este truco probablemente no funcionaría de manera confiable en sistemas donde dash
u otros ash
shells basados yash
, el shell Bourne, ksh88
o ksh93
se usan como /bin/sh
, ya que estos shell no aceptan funciones cuyo nombre contenga guiones.
También relacionado:
Supongo que lo siguiente también funcionaría (no probado realmente):
--() { exec db2 -txf "$0"; }; --