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

    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