Ini adalah konvensi sehingga shell *nix mengetahui jenis juru bahasa apa yang harus dijalankan.
Misalnya, ragam ATT yang lebih lama ditetapkan secara default ke sh (Bourne shell), sedangkan BSD versi lama menggunakan csh (cangkang C).
Bahkan hari ini (di mana sebagian besar sistem menjalankan bash, "Bourne Again Shell" ), skrip bisa dalam bash, python, perl, ruby, PHP, dll, dll. Misalnya, Anda mungkin melihat #!/bin/perl
atau #!/bin/perl5
.
PS:Tanda seru (!
) disebut "bang" . Simbol komentar shell (#
) terkadang disebut "hash" .
PPS:Ingat - di bawah *nix, mengaitkan akhiran dengan jenis file hanyalah sebuah konvensi , bukan "aturan" . Sebuah dapat dieksekusi bisa berupa program biner, salah satu dari sejuta jenis skrip dan hal lainnya juga. Karenanya kebutuhan akan #!/bin/bash
.
Lebih tepatnya shebang #!
, jika itu adalah dua byte pertama dari yang dapat dieksekusi (x
mode) file, diinterpretasikan oleh execve(2) system call (yang menjalankan program). Tapi spesifikasi POSIX untuk execve
jangan sebut shebang.
Itu harus diikuti oleh jalur file dari penerjemah yang dapat dieksekusi (yang BTW bahkan bisa relatif, tetapi paling sering absolut).
Trik yang bagus (atau mungkin tidak terlalu bagus) untuk menemukan juru bahasa (mis. python
) di $PATH
pengguna adalah dengan menggunakan env
program (selalu di /usr/bin/env
di semua Linux) seperti mis.
#!/usr/bin/env python
Setiap ELF yang dapat dieksekusi dapat menjadi juru bahasa. Anda bahkan dapat menggunakan #!/bin/cat
atau #!/bin/true
jika Anda mau! (tapi itu seringkali tidak berguna)
Ini disebut shebang. Dalam bahasa unix, # disebut tajam (seperti dalam musik) atau hash (seperti tagar di twitter), dan ! disebut bang. (Anda sebenarnya dapat mereferensikan perintah shell sebelumnya dengan !!, disebut bang-bang). Jadi jika disatukan, Anda mendapatkan haSH-BANG, atau shebang.
Bagian setelah #! memberi tahu Unix program apa yang digunakan untuk menjalankannya. Jika tidak ditentukan, ia akan mencoba dengan bash (atau sh, atau zsh, atau apa pun variabel $SHELL Anda) tetapi jika ada di sana ia akan menggunakan program itu. Selain itu, # adalah komentar dalam sebagian besar bahasa, sehingga baris tersebut diabaikan dalam eksekusi berikutnya.