If-Koubou

Kapan Lebih Baik Menggunakan #! / Bin / bash Daripada #! / Bin / sh dalam Script Shell?

Kapan Lebih Baik Menggunakan #! / Bin / bash Daripada #! / Bin / sh dalam Script Shell? (Bagaimana caranya)

Ketika Anda membuat skrip shell baru, Anda ingin memastikannya sebagai masalah bebas mungkin, tetapi kadang-kadang bisa sedikit membingungkan untuk mengetahui shebang mana yang terbaik untuk Anda gunakan. Pada catatan itu, pos SuperUser Q & A hari ini memiliki jawaban untuk pertanyaan pembaca yang bingung.

Sesi Tanya & Jawab hari ini hadir untuk memberi kami hak milik SuperUser-sub divisi Stack Exchange, pengelompokan situs web Q & A berbasis komunitas.

Pertanyaan

Pembaca SuperUser Hendre ingin tahu kapan lebih baik digunakan #! / bin / bash dari pada #! / bin / sh dalam skrip shell:

Kapan lebih tepat digunakan #! / bin / bash daripada #! / bin / sh dalam skrip shell?

Kapan lebih baik digunakan #! / bin / bash dari pada #! / bin / sh dalam skrip shell?

Jawabannya

Penggemar kontributor SuperUser memiliki jawaban untuk kami:

Pendeknya:

  • Ada beberapa shell yang mengimplementasikan superset dari spesifikasi sh POSIX. Pada sistem yang berbeda, / bin / sh mungkin tautan ke abu, bash, dash, ksh, zsh, dll. Akan selalu kompatibel dengan shim, tidak pernah csh atau ikan.
  • Selama Anda hanya menggunakan fitur sh, Anda dapat (dan mungkin seharusnya) menggunakannya #! / bin / sh dan skripnya harus berfungsi dengan baik, tidak peduli mana shell itu.
  • Jika Anda mulai menggunakan fitur khusus bash (yaitu array), Anda harus secara khusus meminta bash karena, bahkan jika / bin / sh sudah memanggil bash pada sistem Anda, mungkin tidak pada sistem orang lain, dan skrip Anda tidak akan berjalan di sana. Hal yang sama berlaku untuk zsh dan ksh, tentu saja.
  • Bahkan jika skrip hanya untuk penggunaan pribadi, Anda mungkin memperhatikan bahwa beberapa sistem operasi berubah / bin / sh selama upgrade. Sebagai contoh, pada Debian itu dulu bash, tetapi kemudian diganti dengan dasbor yang sangat minim. Skrip yang menggunakan bashisms tetapi memiliki #! / bin / sh tiba-tiba pecah.

Namun:

  • Bahkan #! / bin / bash bukankah itu benar. Pada sistem yang berbeda, bash mungkin hidup / usr / bin, / usr / pkg / bin, atau / usr / local / bin.
  • Pilihan yang lebih bisa diandalkan adalah #! / usr / bin / env bash, yang menggunakan $ PATH. Meskipun alat env itu sendiri tidak dijamin dengan baik, / usr / bin / env masih bekerja pada lebih banyak sistem daripada / bin / bash tidak.

Memiliki sesuatu untuk ditambahkan ke penjelasan? Bicaralah di komentar. Ingin membaca lebih banyak jawaban dari pengguna Stack Exchange yang paham teknologi lainnya? Lihat diskusi lengkap di sini.

Kredit Gambar: Wikipedia