GNU/Linux >> Belajar Linux >  >> Linux

Apakah Benar Menggunakan /bin/sh Di Hashbang Jika Bourne Shell Tidak Tersedia Dalam Distribusi?

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.


Linux
  1. Apa gunanya Perintah ‘/usr/bin/[‘ [Square Bracket] di Linux?

  2. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  3. Mengapa Lebih Baik Menggunakan "#!/usr/bin/env Name" Daripada "#!/path/to/name" Sebagai Shebang?

  1. /usr/bin Vs /usr/local/bin Di Linux?

  2. Apa Perbedaan Antara /sbin/nologin Dan /bin/false?

  3. Mengapa Tidak Ada yang Menggunakan Shell Bourne Sejati Sebagai /bin/sh?

  1. Linux – Menggabungkan /usr/bin Dan /usr/sbin Ke /bin (gnu/linux)?

  2. Apa yang dilakukan baris '!/bin/sh -e'?

  3. Instal binari ke /bin, /sbin, /usr/bin dan /usr/sbin, interaksi dengan --prefix dan DESTDIR