loader

Bilakah Betul untuk Menggunakan #! / Bin / bash Daripada #! / Bin / sh dalam Skrip Shell?

Anonim

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 - satu bahagian dari Stack Exchange, sebuah kumpulan laman web Q & A yang didorong oleh komuniti.

Soalan

Pembaca Superuser Hendre ingin tahu bila lebih baik menggunakan #! / Bin / bash bukan #! / Bin / sh dalam skrip shell:

Bilakah lebih sesuai menggunakan #! / Bin / bash daripada #! / Bin / sh dalam skrip shell?

Bilakah lebih baik menggunakan #! / Bin / bash bukan #! / 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 menjadi 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 juga perlu) menggunakan #! / Bin / sh dan skrip itu perlu berfungsi dengan baik, tidak kira apa shell itu.
  • Sekiranya anda mula menggunakan ciri-ciri khusus bash (iaitu tatasusunan), anda harus secara khusus meminta bash kerana, walaupun / bin / sh telah memanggil bash pada sistem anda, itu mungkin bukan 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 dapati bahawa beberapa sistem operasi mengubah / bin / sh semasa peningkatan. Sebagai contoh, pada Debian ia digunakan untuk menjadi bash, tetapi kemudian diganti dengan dash yang sangat minimum. Skrip yang menggunakan bashism tetapi mempunyai #! / Bin / sh tiba-tiba pecah.

Walau bagaimanapun:

  • Malah #! / Bin / bash tidak betul. Pada sistem yang berbeza, bash mungkin tinggal di / usr / bin, / usr / pkg / bin, atau / usr / local / bin .
  • Pilihan yang lebih dipercayai ialah #! / Usr / bin / env bash, yang menggunakan $ PATH . Walaupun alat env itu sendiri tidak dijamin sama sekali, / usr / bin / env masih berfungsi pada lebih banyak sistem berbanding / bin / bash .


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.

Pilihan Editor