Apakah ada Bash
shebang obyektif yang lebih baik dari yang lain bagi sebagian besar menggunakan?
#!/usr/bin/env bash
#!/bin/bash
#!/bin/sh
#!/bin/sh -
Samar-samar saya ingat beberapa waktu yang lalu mendengar bahwa menambahkan ke akhir mencegah seseorang lewat perintah untuk naskah anda, tetapi tidak dapat menemukan rincian tentang itu.
Anda harus menggunakan #!/usr/bin/env bash
untuk portabilitas: berbeda *nixes menempatkan bash
di tempat yang berbeda, dan menggunakan /usr/bin/env
adalah solusi untuk menjalankan pertama bash
yang ditemukan pada JALAN
. Dan sh
tidak bash
.
/bin/sh
biasanya link ke system's default shell, yang sering bash
tapi pada, misalnya, sistem Debian adalah bobot yang lebih ringan dash
. Either way, asli Bourne shell sh
, jadi jika naskah anda menggunakan beberapa bash
(generasi ke-2, "Bourne Again sh") fitur tertentu ([[ ]]
tes, array, berbagai hal-hal manis, dll.), maka anda harus lebih spesifik dan gunakan nanti. Dengan cara ini, pada sistem dimana bash ini tidak diinstal, naskah anda tidak't berjalan. Aku mengerti, mungkin ada yang menarik trilogi film tentang evolusi ini...tapi itu bisa menjadi desas-desus.
Juga perhatikan bahwa ketika ditimbulkan sebagai sh
, bash
sampai batas tertentu berperilaku sebagai standar POSIX sh
(lihat juga GNU docs tentang hal ini).
Menggunakan shebang line untuk memohon tepat penerjemah tidak hanya untuk BASH. Anda dapat menggunakan shebang untuk setiap bahasa ditafsirkan pada sistem anda seperti Perl, Python, PHP (CLI) dan banyak orang lain. By the way, shebang
#!/bin/sh -
(hal ini juga dapat dua garis, yaitu --
) berakhir bash pilihan setelah semuanya akan diperlakukan sebagai nama file dan argumen.
Menggunakan amplop
perintah membuat script portable dan memungkinkan anda untuk men-setup kustom lingkungan untuk script karenanya portable script harus menggunakan
#!/usr/bin/env bash
Atau untuk apapun bahasa seperti untuk Perl
#!/usr/bin/env perl
Pastikan untuk melihat manusia
dalam halaman untuk bash
:
man bash
dan amplop
:
man env
Catatan: Pada Debian dan Debian berbasis sistem, seperti Ubuntu, sh
terkait dengan dash
tidak bash
. Karena semua sistem yang menggunakan script sh
. Hal ini memungkinkan bash untuk tumbuh dan sistem tetap stabil, menurut Debian.
Juga, untuk menjaga doa *nix seperti saya tidak pernah menggunakan ekstensi file pada peristiwa dipanggil script, karena anda tidak bisa menghilangkan ekstensi pada doa pada executable seperti yang anda bisa pada Windows. File perintah dapat mengidentifikasi itu sebagai script.
Saya sarankan menggunakan:
#!/bin/bash
It's tidak 100% portable (beberapa tempat sistem bash
di lokasi lain selain /bin
), tetapi fakta bahwa banyak skrip yang sudah ada menggunakan #!/bin/bash
tekanan berbagai sistem operasi untuk membuat /bin/bash
setidaknya symlink ke lokasi utama.
Alternatif:
#!/usr/bin/env bash
telah disarankan -- tapi ada's tidak ada jaminan bahwa amplop
perintah di /usr/bin
(dan I've digunakan sistem di mana itu bukan't). Selain itu, bentuk ini akan menggunakan contoh pertama dari bash
di saat ini pengguna $PATH
, yang mungkin tidak cocok versi bash shell.
Jika anda perlu untuk menjalankan skrip pada sistem yang doesn't memiliki /bin/bash
, anda dapat memodifikasi script untuk menunjuk ke lokasi yang benar (yang's memang tidak nyaman).
I've dibahas pengorbanan dalam kedalaman yang lebih besar di jawaban untuk pertanyaan.
Agak mengaburkan update: salah Satu sistem yang saya gunakan, Termux, sebuah desktop Linux-seperti lapisan yang berjalan di bawah Android, doesn't memiliki /bin/bash
(bash
adalah /data/data/com.termux/file/usr/bin/bash
) -- tetapi memiliki penanganan khusus untuk mendukung #!/bin/bash
.
Itu benar-benar tergantung pada bagaimana anda menulis script bash. Jika anda /bin/sh
adalah symlink untuk bash, ketika bash dipanggil sebagai sh
, beberapa fitur tidak tersedia.
Jika anda ingin bash-spesifik, non-POSIX fitur, menggunakan #!/bin/bash