Umumnya, skrip shell berisi komentar berikut di baris pertama file skrip:#!/bin/sh
. Menurut penelitian yang saya buat, ini disebut "hash bang" dan itu adalah komentar konvensional. Komentar ini memberi tahu Unix bahwa file ini dieksekusi oleh Bourne Shell di bawah direktori /bin
.
Pertanyaan saya dimulai dari titik itu. Sampai sekarang saya belum melihat komentar seperti ini #!/bin/bash
. Itu selalu #!/bin/sh
. Namun, distribusi Ubuntu tidak memiliki program Bourne Shell. Mereka memiliki Bourne Again Shell (bash).
Pada titik itu, apakah benar untuk menempatkan komentar #!/bin/sh
dalam skrip shell yang ditulis dalam distribusi Ubuntu?
Jawaban yang Diterima:
#!/bin/sh
harus bekerja pada semua distribusi Unix dan Unix-like. Ini umumnya dianggap sebagai hashbang paling portabel selama skrip Anda tetap sesuai dengan POSIX. /bin/sh
shell seharusnya menjadi shell yang mengimplementasikan standar shell POSIX, terlepas dari apa shell sebenarnya yang menyamar sebagai /bin/sh
cangkang.
#!/bin/sh
biasanya hanya tautan sekarang karena cangkang Bourne tidak lagi dipertahankan. Pada banyak sistem Unix /bin/sh
akan menjadi tautan ke /bin/ksh
atau /bin/ash
, pada banyak sistem Linux berbasis RHEL ini akan menjadi tautan ke /bin/bash
, namun pada Ubuntu dan banyak sistem berbasis Debian, ini adalah tautan ke /bin/dash
. Semua shell, saat dipanggil sebagai sh
, akan memasuki mode kompatibilitas POSIX.
Hashbang adalah pengganti yang penting karena memungkinkan portabilitas yang jauh lebih besar daripada metode lain, selama skrip Anda benar-benar sesuai dengan POSIX (diulang untuk menekankan pentingnya).
Catatan:Saat bash
dipanggil dalam mode POSIX itu masih akan mengizinkan beberapa hal non-POSIX seperti [[
, array, dan lainnya. Hal-hal itu mungkin gagal pada non-bash
sistem.