Saya perhatikan bahwa pada dasarnya tidak ada sistem yang pernah saya gunakan yang /bin/sh
bisa dieksekusi. Itu selalu merupakan symlink ke dash
, bash
dalam mode POSIX, atau yang serupa.
Mengapa? Apa kerugian menggunakan yang asli, asli /bin/sh
? (Kecepatan? Lisensi?)
sh
dikaitkanksh
?ksh
.bash
, IIRC.sh
ini didasarkan pada standar yang berarti kita dapat memiliki beberapa implementasi yang akan berperilaku dengan cara yang jelas selama Anda menggunakan sintaks standar dalam skrip Anda.Jawaban:
Saya kira kekurangan fitur - tidak ada riwayat perintah, tidak ada pengalihan mewah, tidak ada pengeditan baris perintah. BSD memperkenalkan
csh
shell C karena alasan itu. Faktor lain adalah bahwa Genuine Bourne Shell baru-baru ini tersedia dalam bentuk open source . Kecuali Anda melisensikannya, Anda tidak dapat mendistribusikannya. Itu membuatnya jauh dari jangkauan untuk distro bebas biaya, dan membuatnya secara ideologis tidak menyenangkan untuk distro lain, dan * BSD.Tetapi kodenya tersedia sekarang. Anda dapat melihatnya, mengompilasinya, memutarnya.
sumber
sh
persis seperti menggunakanbash
kecuali bahwa itu adalah: lebih lambat, program lebih lama dan lebih sulit untuk dipertahankan.sh
perintah untuk menjalankan shell yang sesuai dengan POSIX, apa yang tidak dimiliki shell Bourne legacy. Walaupun POSIX tidak perlush
berada di/bin/sh
dalamnya, itu adalah direktori yang paling logis.sh
tidak memiliki ekspansi tilde dan brace, beberapa built-in hilang (misalnyapushd
danpopd
,select
) tidak ada ekspansi aritmatika. Banyak variabel yang hilang, misalnyaPIPESTATUS
.Pernyataan dalam pertanyaan Anda salah. Solaris sampai versi 10 adalah menyediakan warisan sejati Bourne shell sebagai
/bin/sh
. Ini dilakukan untuk tidak merusak kompatibilitas dengan skrip lama yang mungkin gagal dengan shell yang berbeda. Namun pilihan ini sangat membuat frustasi.Kebanyakan jika tidak semua Unix dan Unix seperti rilis, termasuk Solaris 11, menyediakan shell yang kompatibel dengan
/bin/sh
POSIX karena POSIX mengamanatkansh
perintah untuk meluncurkan shell POSIX, bukan shell Bourne yang tidak sesuai./bin/sh
umumnya:ksh88
atauksh93
pada implementasi Unix komersialbash
padaOS/X
(meskipun duluzsh
)ash
ataupdksh
turunan dari yang lainBSDs
bash
ataudash
pada distribusi Gnu / Linux.Ini tidak harus berupa tautan tetapi dapat menjadi nyata yang dapat dieksekusi pada banyak sistem selain Gnu / Linux.
Menariknya, terlepas dari apa yang menyatakan jawaban paling terunggulkan untuk pertanyaan Anda, itu bukan kurangnya fitur yang mendorong pengembang distribusi untuk menginstal sesuatu yang berbeda dari shell Bourne yang lama
/bin/sh
tetapi keinginan untuk menjadi patuh POSIX mungkin, yaitu berperilaku seperti Unix suka OS. Fakta bahwa shell POSIX memiliki lebih banyak fitur daripada shell Bourne yang lama hanya merupakan efek samping dari tujuan kepatuhan standar ini.Ini juga merupakan fakta beberapa shell, terutama
bash
, berperilaku berbeda ketika dipanggilsh
, dan ini sebagian besar menghilangkan fitur dari shell, bukan sebaliknya.sumber
Sejauh yang saya tahu shell Bourne asli tidak dapat digunakan oleh BSD dan proyek GNU, karena lisensi.
Saat itu Unix asli tidak memiliki lisensi dan proyek GNU membutuhkan shell yang berada di bawah GPL sehingga mereka menggunakan bash.
Hal yang sama berlaku untuk BSD4 induk dari semua BSD. Berkat gugatan AT&T, mereka perlu menulis ulang semua sumber dari Unix asli termasuk cangkang Bourne.
Dari FreeBSDs
man sh
Jadi kedua proyek dipaksa untuk tidak menggunakan shell Bourne dan puas dengan shell open source yang sebenarnya.
sumber
Ada masalah lain. Shell Bourne memang menggunakan sbrk () alih-alih malloc () dan ini membuatnya tidak terlalu portabel.
Setelah Shell Bourne menjadi OpenSource melalui OpenSolaris, saya membuat versi portabel hafway dan kemudian versi yang benar-benar portabel dengan mengganti sbrk () oleh malloc () dengan bantuan dari Geoff Collyer (orang yang sama yang membantu menghindari sbrk () di Korn Shell).
Alasan awal, mengapa saya membuat versi portabel dari Bourne Shell adalah saya suka membuat Editor Sejarah yang saya tulis untuk "bsh" saya antara tahun 1982 dan 1984 juga tersedia di Bourne Shell. Sementara itu, saya mem-porting sebagian besar karakteristik unik yang saya tulis untuk "bsh" ke Bourne Shell.
Ini antara lain:
Halaman manual online ada di: http://schillix.sourceforge.net/man/man1/bosh.1.html Sumber adalah bagian dari kotak alat schily di:
https://sourceforge.net/projects/schilytools/files/
Saya sarankan untuk menggunakan: http://sourceforge.net/projects/schilytools/files/schily-2015-08-18.tar.bz2 atau versi yang lebih baru.
PS Saya tertarik dengan umpan balik
sumber
Itu terkait dengan shell yang memberikan kompatibilitas mundur 100% . Anda tidak kehilangan apa pun yang dimiliki oleh shell asli tetapi mendapatkan lebih banyak fitur di atasnya. Tidak ada kerugian jadi mengapa ketinggalan fitur baru? Ini adalah alasan yang sama mengapa
/bin/vi
biasanya dikaitkan dengan vim .sumber
bash
jauh, jauh lebih lambat daripadadash
IFS=,; rm file1,file2,file3
akan menghapus 3 file tersebut di shell Bourne. Itu (konyol) fitur telah dihapus di POSIX sh. Ada puluhan perbedaan kecil yang dapat menyebabkan skrip yang ditulis untuk shell Bourne bekerja secara berbeda dengan POSIX sh.