Saya pikir /bin/sh
itu adalah symlink ke shell pilihan saya. Saya selalu menggunakan bash
, jadi saya berasumsi itu /bin/sh
akan menunjuk ke /bin/bash
. Ternyata, itu menunjuk ke /bin/dash
.
Menjadi lebih lucu. Saya mulai dash
dan melakukan echo $SHELL
dan mencetak /bin/bash
(jadi mereka pada dasarnya sama?). Namun, halaman manual dash
sama sekali berbeda dari halaman manual bash
(jadi mereka tidak sama?).
echo $SHELL
mencetak/bin/bash
adalah karena variabel itu ditetapkan untuk shell default yang dimulai ketika Anda login daripada shell saat ini yang Anda jalankan. Mulai ksh atau zsh dari Bash prompt danecho $SHELL
masih akan mengatakan/bin/bash
. Gunakanps
untuk melihat apa yang sedang berjalan.Jawaban:
Debian dan Ubuntu beralih ke tanda hubung (iirc) karena beberapa hal. Pertama-tama, Bash telah menjadi besar selama bertahun-tahun. Bahkan,
/bin/bash
biner pada sistem Ubuntu 8.04 saya hampir sepuluh kali lipat (!)/bin/dash
. Sekarang, itu tidak masalah banyak untuk penggunaan shell sehari-hari, tetapi itu penting dalam situasi berikut:Kelemahan dari menggunakan Dash daripada Bash untuk skrip, adalah bahwa banyak orang menggunakan basa sintaksis yang hanya dimiliki Bash, yang disebut Bashism . Contoh Bashisme adalah substring, seperti ini:
Dan ini:
Dash, di sisi lain terutama bertujuan untuk mematuhi POSIX (dan tidak lebih dari itu), akan memberi Anda kesalahan substitusi yang buruk jika Anda mencoba ini:
Ini akan menjadi masalah jika Anda menggunakan
/bin/sh
(dan karenanyadash
) sebagai penerjemah untuk shellscripts Anda dan menggunakan Bashisme di dalamnya. Debian dan Ubuntu memiliki halaman wiki yang bagus tentang Bashisme dan mengapa mereka buruk dalam skrip shell secara umum dan skrip init pada khususnya. Karena itu, Anda harus secara sadar memilih apakah Anda perlu/bin/sh
atau/bin/bash
sebagai juru bahasa naskah Anda.Dash tidak seharusnya digunakan sebagai shell default pada sistem Anda. Cukup gunakan Bash untuk itu. Untuk portabilitas skrip Anda, Anda dapat menggunakan Dash sebagai penerjemah untuk meningkatkan peluang skrip berjalan di Linux rasa dan Unix lainnya.
sumber
/bin/bash
; banyak sistem non-Linux memilikish
cangkang aktual yang bahkan hampir tidak kompatibel dengannyabash
.echo ${a#123}
bukan bashism, itu bagian dari spesifikasi ekspansi Parameter POSIX. pubs.opengroup.org/onlinepubs/009695399/utilities/... Anda hanya tidak mendapatkan gaya sed yang lebih maju, Bash, yang posix adalah gaya substring + karakter ekspansi sederhana. Artinya, POSIX juga memungkinkanecho ${a#*6}
Coba lihat di sini: https://wiki.ubuntu.com/DashAsBinSh mungkin Ini akan membantu.
sumber
dash adalah pengganti bash yang ringan, dengan anggapan Anda menggunakan ubuntu yang diubah beberapa tahun yang lalu.
Ini tidak terlalu bagus, imho. http://forums.debian.net/viewtopic.php?f=20&t=45116
sumber
Karena tidak semua shell disetel
$SHELL
saat dijalankan, Anda mengetahui shell Anda saat ini dengan:Jika itu memberikan kesalahan, itu csh, jika tidak
argv[0]
Anda dipanggil, yang biasanya shell, mungkin dengan-
tanda hubung terkemuka , untuk menunjukkan bahwa itu adalah shell login.Ini tidak dijamin , karena di
argv[0]
bawah kendali proses permohonan, tetapi dalam praktiknya pendekatan yang paling dapat diandalkan.sumber