Terkait: Interpreter shell mana yang menjalankan skrip tanpa shebang?
Script tidak memiliki shebang / hashbang / #!
line, hanya karena dash ganda tidak #!
.
Namun, skrip akan dieksekusi oleh shell (lihat pertanyaan dan jawaban terkait di atas), dan di shell itu, jika -
karakter yang valid dalam nama fungsi, baris menyatakan fungsi shell yang disebut --
tidak melakukan apa-apa (yah, itu berjalan :
, yang tidak melakukan apa-apa ) dan yang tidak pernah disebut.
Fungsinya, dalam notasi multi-garis yang lebih umum (hanya untuk membuatnya lebih jelas seperti apa, karena namanya yang aneh agak mengaburkan fakta bahwa itu sebenarnya sebuah fungsi):
-- () {
:
}
Satu-satunya tujuan dari definisi fungsi adalah untuk memiliki garis yang valid dalam skrip shell dan pada saat yang sama perintah SQL yang valid (komentar). Kode semacam ini disebut polyglot .
Setelah mendeklarasikan fungsi shell palsu, skrip, ketika dijalankan oleh penerjemah skrip shell, digunakan exec
untuk mengganti shell saat ini dengan proses yang dihasilkan dari menjalankan db2 -txf "$0"
, yang akan sama dengan menggunakan db2 -txf
pathname dari skrip dari baris perintah.
Trik ini mungkin tidak akan berfungsi dengan baik pada sistem di mana dash
atau ash
shell berbasis lainnya yash
,, Bourne shell, ksh88
atau ksh93
digunakan sebagai /bin/sh
, karena shell ini tidak menerima fungsi yang namanya berisi tanda hubung.
Juga terkait:
Saya kira yang berikut ini juga akan berfungsi (tidak benar-benar diuji):
--() { exec db2 -txf "$0"; }; --