Ada beberapa program yang mengimplementasikan bahasa /bin/sh
. Di Ubuntu, /bin/sh
adalah dash, yang dirancang untuk menjadi cepat, untuk menggunakan sejumlah kecil memori, dan tidak mendukung lebih dari yang diharapkan /bin/sh
. Di RHEL, /bin/sh
adalah bash, yang lebih lambat dan menggunakan lebih banyak memori tetapi memiliki lebih banyak fitur. Salah satu fitur ini adalah ==
operator untuk [
sintaksis bersyarat. Dukungan Dash [
, yang merupakan fitur sh dasar, tetapi tidak memiliki ==
operator yang merupakan ekstensi bash (dan ksh dan zsh).
Anda dapat mengganti sistem Anda untuk menggunakan bash. Di Ubuntu, /bin/sh
adalah tautan simbolis ke dash
. Anda dapat menjadikannya sebagai tautan simbolis bash
. Versi Debian dan Ubuntu saat ini (dan turunannya) menjadikan ini opsi pemasangan dasbor. Untuk mengubahnya, jalankan
sudo dpkg-reconfigure dash
dan jawab "ya" untuk tetap berlari sebagai /bin/sh
atau "tidak" untuk beralih ke bash.
Anda dapat menyimpan bash sebagai /bin/sh
, tetapi itu akan membuat sistem Anda sedikit lebih lambat. Bahkan dapat dibayangkan bahwa beberapa skrip sistem tidak kompatibel dengan bash, walaupun itu tidak mungkin karena bash sebagian besar adalah superset dari dash.
Untuk distribusi yang tidak memiliki antarmuka untuk memilih antara implementasi /bin/sh
, berikut ini cara beralih ke bash.
sudo ln -s bash /bin/sh.bash
sudo mv /bin/sh.bash /bin/sh
Biarkan terminal terbuka dan periksa apakah Anda masih dapat menjalankan beberapa sh
skrip setelah itu. Jika Anda mengacaukan perintah ini, itu akan membuat sistem Anda tidak dapat digunakan. (Ngomong-ngomong, alasan saya menggunakan banyak perintah di atas daripada yang terlihat langsung sudo ln -sf bash /bin/sh
adalah karena ln -sf
itu bukan atom. Dalam kasus yang tidak disangka komputer Anda mengalami crash selama operasi ini, Anda harus mem-boot dari media cadangan untuk memulihkannya. Sebaliknya, mv
adalah atomik.)
Untuk mengembalikan tanda hubung sebagai /bin/sh
:
sudo ln -s dash /bin/sh.dash
sudo mv /bin/sh.dash /bin/sh
Perhatikan bahwa jika sh secara /bin/bash
default pada distribusi Anda, beralih ke tanda hubung dapat menyebabkan skrip gagal, karena bash memiliki lebih banyak fitur daripada tanda hubung. Skrip Bash harus dimulai dengan #!/bin/bash
, dan skrip dimulai dengan #!/bin/sh
tidak boleh menggunakan fitur spesifik bash, tetapi distribusi yang dikirimkan dengan bash /bin/sh
mungkin menggunakan fitur spesifik bash dalam #!/bin/sh
skrip yang khusus untuk distribusi itu (tidak apa-apa asalkan tidak ada harapan bahwa pengguna dapat beralih ke dasbor karena /bin/sh
dan tidak ada harapan bahwa skrip ini berfungsi pada distribusi lain).
==
yang seharusnya=
. Itu, dan bahwa ekspansi variabel harus dikutip ganda.