Bilakah Betul untuk Menggunakan #! / Bin / bash Daripada #! / Bin / sh dalam Skrip Shell?
Apabila anda mencipta skrip shell baru, anda ingin memastikan ia sebagai masalah bebas mungkin, tetapi kadang-kadang ia boleh sedikit mengelirukan untuk mengetahui yang mana dia adalah yang terbaik untuk anda gunakan. Atas nota itu, siaran SuperQser Q & A hari ini mempunyai jawapan kepada soalan pembaca yang keliru.
Sesi Soalan & Jawapan hari ini datang kepada kami dengan ihsan SuperUser-bahagian pembahagian Stack Exchange, kumpulan yang diketuai oleh komuniti laman web Q & A.
Soalan
Pembaca Superuser Hendre ingin tahu bila lebih baik digunakan #! / bin / bash bukannya #! / bin / sh dalam skrip shell:
Bilakah ia lebih sesuai untuk digunakan #! / bin / bash bukannya #! / bin / sh dalam skrip shell?
Bilakah lebih baik untuk digunakan #! / bin / bash bukannya #! / bin / sh dalam skrip shell?
Jawapan
Penyokong SuperUser mempunyai jawapan untuk kami:
Pendek kata:
- Terdapat beberapa cengkerang yang melaksanakan superset spesifikasi POSIX sh. Pada sistem yang berbeza, / bin / sh mungkin pautan kepada abu, bash, dash, ksh, zsh, dan sebagainya. Ia akan sentiasa bersesuaian walaupun, tidak pernah csh atau ikan.
- Selagi anda melekat pada ciri-ciri sahaja, anda boleh (dan mungkin perlu) gunakan #! / bin / sh dan skrip itu perlu berfungsi dengan baik, tidak kira apa pun shell itu.
- Sekiranya anda mula menggunakan ciri-ciri khusus bash (iaitu array), anda secara khusus perlu meminta bash kerana, walaupun / bin / sh sudah memanggil bash pada sistem anda, ia mungkin tidak pada sistem orang lain, dan skrip anda tidak akan berjalan di sana. Begitu juga dengan zsh dan ksh, tentu saja.
- Walaupun skrip hanya untuk kegunaan peribadi, anda mungkin dapat melihat bahawa beberapa sistem operasi berubah / bin / sh semasa naik taraf. Sebagai contoh, pada Debian ia digunakan untuk menjadi bash, tetapi kemudian diganti dengan dash yang sangat minimum. Skrip yang menggunakan bashism tetapi ada #! / bin / sh tiba-tiba pecah.
Walau bagaimanapun:
- Malah #! / bin / bash tidak betul. Pada sistem yang berbeza, bash mungkin hidup / usr / bin, / usr / pkg / bin, atau / usr / local / bin.
- Pilihan yang lebih dipercayai ialah #! / usr / bin / env bash, yang digunakan $ PATH. Walaupun alat env itu sendiri tidak terjamin sama sekali, / usr / bin / env masih berfungsi pada lebih banyak sistem daripada / bin / bash tidak.
Mempunyai sesuatu untuk menambah penjelasannya? Bunyi dalam komen. Ingin membaca lebih banyak jawapan dari pengguna Stack Exchange yang berteknologi tinggi? Lihat thread perbincangan penuh di sini.
Kredit Imej: Wikipedia