Mengapa "she-bang" dimulai dengan #!
, seperti #!/bin/bash
? Saya selalu menerima bahwa ini bagaimana hal itu dilakukan, tetapi apakah ada alasan di baliknya?
Mengapa memulai dengan #
; bukankah itu biasanya komentar? Ataukah itu yang seharusnya menjadi komentar?
#!
(sebanyak mengingat dmr ...), termasuk penjelasan mengapa#
(ya, garis harus diabaikan oleh cangkang yang ada).Jawaban:
Biasanya shebang hanya merujuk pada
#!
(!
biasanya disebut "bang", dan sepertinya "dia" adalah korupsi dari "SHArp" atau "haSH" untuk#
) - seluruh baris disebut garis shebangItu memang dimulai dengan karakter komentar untuk kompatibilitas ke belakang dengan hal-hal yang tidak tahu bagaimana menanganinya; yang
!
diduga hanya untuk membedakannya dari komentar acak mulai file, sehingga file yang dimulai dengan# this is my script!
tidak mencoba untuk menjalankanthis is my script!
interpretersumber
!
sering digunakan dalam konteks lain untuk menunjukkan perintah yang akan dieksekusi. Sebagai contoh dalamvim
atau program lain dengan baris perintah mereka sendiri, bang sering kali adalah karakter pelarian yang membuat mereka menjalankan perintah dalam shell sistem alih-alih antarmuka internal mereka.Untuk memahami ini, Anda harus menyadari bahwa baris pertama skrip sebenarnya dibaca dua kali , oleh 2 program yang berbeda. Pertama kali, kernel membuka file dan mencari urutan karakter (
#!
) di baris pertama. Jika menemukannya, ia menjalankan program shell yang ditunjukkan di sana, meneruskan nama file sebagai parameter. (misalnya jika file/home/me/foo
dimulai dengan#!/bin/sh
, kernel akan berjalan/bin/sh /home/me/foo
).Selanjutnya shell (
bin/sh
atau program penerjemah apa pun ditentukan) membaca file. Shell tidak tahu apa-apa tentang garis shebang tetapi masih akan membaca baris pertama karena sama seperti baris lain dalam file ... ia membaca semuanya. Anda tidak ingin shell crash atau mengubah perilakunya dengan cara apa pun ... cara untuk melakukannya adalah dengan membuatnya memperlakukan sebagai komentar dan abaikan saja. Dengan demikian, karakter terbaik untuk memulai instruksi kernel adalah karakter komentar.sumber
Itu perlu komentar karena hanya dengan cara ini ia juga akan berfungsi untuk menjalankan skrip seperti "interpretername scriptname". Saya tidak tahu tentang asal usul "!".
sumber