Saya baru saja mulai mempelajari dasar-dasar Unix dan bertanya-tanya mengapa ada begitu banyak shell dalam sistem seperti unix. Dari buku Pemrograman lanjutan di Unix Environment :
Shell adalah interpreter baris perintah yang membaca input pengguna dan mengeksekusi perintah. Input pengguna ke shell biasanya dari terminal (shell interaktif) atau kadang-kadang dari fi le (disebut skrip shell).
Dan kemudian buku berlanjut ke daftar sejumlah program shell seperti Bourne shell, Bourne-again shell, Cshell, dll. Pertanyaan saya pada dasarnya mengapa kita perlu banyak shell?
Jawaban:
Sebagian besar cangkang yang digunakan dalam lingkungan UNIX modern dimaksudkan untuk memenuhi spesifikasi sh POSIX. POSIX sh berasal dari shell Korn asli (ksh88), yang pada gilirannya berasal dari shell Bourne sebelumnya, tetapi POSIX sh hanya menentukan sebagian kecil dari fungsionalitas ksh88 sekalipun. Shell yang hanya menerapkan persyaratan minimum tidak memiliki banyak fitur yang diperlukan untuk menulis semua kecuali skrip yang paling sepele dengan cara yang aman dan masuk akal. Misalnya, variabel lokal dan array adalah ekstra non-standar.
Oleh karena itu, alasan pertama adalah untuk memperpanjang shell dengan fitur tambahan. Kerang yang berbeda memilih untuk fokus pada hal yang berbeda. Sebagai contoh, Zsh berfokus pada fitur interaktif canggih sementara ksh93 (shell asli "asli" saat ini) berfokus pada fitur dan kinerja pemrograman yang kuat. Bahkan kerang yang sangat minim seperti Dash menambahkan setidaknya beberapa tambahan non-standar seperti variabel lokal.
Fitur-fitur tambahan jarang bisa dioperasikan secara luas. Sebagian besar fitur ksh88 cukup dapat dioperasikan dengan baik seperti sintaks globbing yang diperluas, tetapi dengan fitur yang tidak standar, tidak ada jaminan, dan Anda harus benar-benar tahu apa yang Anda lakukan untuk menggunakannya dengan cara yang portabel.
Alasan kedua adalah warisan. Masih ada banyak Unix eksklusif di luar sana yang menggunakan implementasi non-standar kuno untuk / bin / sh mereka. Sampai baru-baru ini, Solaris masih menggunakan Bourne sebagai pengganggu mereka dan memilih untuk mempertahankan cangkang Heirloom daripada meningkatkan ke sesuatu yang modern. Sistem ini biasanya datang dengan cangkang berbeda yang dapat Anda alihkan, misalnya dengan mengubah variabel PATH Anda atau mengubah shebang di dalam skrip individual.
Jadi untuk meringkas. Ada beberapa shell, seringkali secara default:
sumber
local
bukan POSIX atau Unix, itu ditentukan dan diperlukan dalam standar Linux (LSB) dan standar kebijakan debian . Perhatikan bahwaes
ini merupakan tindak lanjutrc
.mksh
berasal dari Public Domain Bourne Shell, yang juga ditulis karena alasan lisensi. (Masalah-masalah ini masih tetap ada - perizinan dan portabilitas dan ukuran adalah tiga faktor yang membantu saya untuk membujuk Google untuk menyertakan mksh dengan Android.)Karena orang memiliki kebutuhan yang berbeda dan ada baiknya memiliki alternatif yang sesuai dengan kebutuhan Anda dalam situasi tertentu. Shell hanyalah alat sendiri dan harus diganti oleh yang lain menurut saya. Itulah kekuatan Unix / Linux, berlawanan dengan apa yang telah dipilih Microsoft Windows.
Demikian pula ... Mengapa ada begitu banyak editor teks? Mengapa orang mengembangkan browser baru jika sudah ada? Mengapa ada GNOME, KDE, Xfce, LXDE, E17, dll.?
sumber
COMMAND.COM
di DOS pun tergantikan. Namun, Anda sering mendapatkan sistem yang sangat rapuh karena asumsi aplikasi lain (dan pengguna lain). Akibatnya, ada beberapa alternatif yang berhasilCMD.EXE
. Salah satunya adalah PowerShell, yang memiliki inersia dari Microsoft mendukungnya. Contoh lain adalah, anehnya,bash
karena dukungan yang layak dari komunitas Cygwin, belum lagi orang-orang MinGW. Sedangkan untuk Manajer Jendela, Windows hanya punya satu per satu, tetapi ada beberapa seiring waktu seiring dengan perkembangan lingkungan Windows itu sendiri.Jawaban singkat
Karena sejarah lisensi yang aneh, tidak ada entitas tunggal yang mengembangkan Unix. Itu adalah proses komunitas di mana relawan dan perusahaan telah berpartisipasi. Entitas-entitas ini tidak selalu berbagi semua alat mereka, jadi cangkang terpisah terjadi. Pada saat kami menyadari betapa kontra produktifnya ini, sudah terlambat untuk menyatukan semua kerang yang digunakan. Sebaliknya pekerjaan telah dilakukan untuk memastikan bahwa semua kerang ini (secara teoritis) kompatibel satu sama lain .
Jawaban panjangnya rumit dan terkait erat dengan sejarah Unix itu sendiri. Tidak mungkin itu akan bertahan pada satu jawaban di halaman ini, tetapi sudah banyak didokumentasikan. Anda akan menemukan jawaban yang lebih terperinci dan tepat dengan melihat-lihat web dan buku-buku yang berhubungan dengan sejarah Unix.
sumber
Kerang yang berbeda ada karena alasan yang sama dengan peramban web yang berbeda: setiap orang memiliki preferensi, dan beberapa kerang memiliki muatan atau momentum historis. Masing-masing memiliki fitur dan keistimewaan yang berbeda.
sumber
Sebagian besar, sejarah ...
Bourne dikembangkan sebagai bagian dari (kepatutan) SysV Unix, sementara BSD digunakan
csh
... Kemudian, bash dikembangkan sebagai alternatif open-source untuk Bourne shell (dan versi yang disempurnakan, seperti ksh). Shell seperti Bourne diadopsi dalam standar POSIX. ksh patuh dan bash bisa patuh.Shell suka
csh
dantcsh
jauh lebih mudah digunakan secara interaktif daripada shell Bourne asli (yang kekurangan penyelesaian perintah, dll) tetapi mengerikan untuk skrip ...Di beberapa lingkungan, seperti sistem embedded berbasis Unix, fitur scripting, ukuran dan kecepatan lebih penting daripada fitur interaktif seperti penyelesaian perintah, dan varian shell yang berbeda cenderung digunakan.
Untuk skrip portabel, Anda harus menggunakan Bourne-varian yang sesuai dengan POSIX dan menghindari ekstensi.
sumber