İlgili: Hangi kabuk yorumlayıcısı hiç kodsuz bir senaryo çalıştırır?
Betiğin, #!bir çift çizgi olmadığı için bir shebang / hashbang / satırı yoktur #!.
Ancak, komut dosyası bir kabuk tarafından yürütülür (yukarıdaki bağlantılı soru ve yanıtlara bakın) ve bu kabukta, -işlev adında geçerli bir karakter varsa , satır --, hiçbir şey yapmayan (iyi çalışır :, hiçbir şey yapmaz ) ve asla çağrılmaz.
İşlev, daha yaygın çok satırlı gösterimde (sadece neye benzediğini daha açık hale getirmek için, garip adı aslında bir işlev olduğu gerçeğini gizler):
-- () {
:
}
İşlev tanımının tek amacı, kabuk betiğinde geçerli olan bir satıra ve aynı zamanda geçerli bir SQL komutuna (yorum) sahip olmaktır. Bu tür kodlara çokglot denir .
Sahte kabuk işlevini bildirdikten sonra, komut dosyası, bir kabuk komut dosyası yorumlayıcısı tarafından yürütüldüğünde exec, geçerli kabuğu , komut satırından komut dosyasının yol adında db2 -txf "$0"kullanılanla aynı olacak şekilde çalışan işlemden değiştirmek için kullanır db2 -txf.
Bu hile muhtemelen Bourne kabuğunun dashveya diğer ashtemelli kabukların, yashBourne kabuğunun ksh88veya bu kabuğun adı tire işareti olan işlevleri kabul etmediği gibi ksh93kullanıldığı sistemlerde güvenilir bir şekilde çalışmaz /bin/sh.
Ayrıca:
Aşağıdakilerin de işe yaradığını varsayalım (gerçekten test edilmedi):
--() { exec db2 -txf "$0"; }; --