Jawaban singkat untuk "mengapa shell sh asli tidak hadir sh
" adalah bahwa tidak ada sh asli.
Baiklah, ada: ini cangkang Thompson . Versi 1 memiliki beberapa fitur yang kita kenal sekarang, khususnya pengalihan dan pipa (baca makalah Dennis Ritchie tentang sejarah awal Unix ). Versi selanjutnya menambahkan fitur seperti eksekusi latar belakang &
, globbing (diimplementasikan dengan program eksternal), dan beberapa bentuk penawaran, tetapi tidak memiliki variabel atau struktur kontrol bersarang. Persyaratan dan loop disediakan melalui program eksternal if
(yang mengambil satu syarat dan satu perintah sebagai argumen) dan goto
(yang berfungsi dengan mengubah posisi file induknya dalam file skrip).
Pada tahun 1979, di Unix V7 , cangkang Thompson digantikan /bin/sh
oleh cangkang Bourne . Rilis pertama sudah memiliki banyak fitur yang hadir di dash hari ini, dan versi berikutnya memperkenalkan lebih banyak . Beberapa tahun kemudian, shell Korn datang ke tempat kejadian, dengan set fitur yang berkembang; banyak varian Unix menginstalnya dengan nama ksh
.
Pada tahun 1992, POSIX mengkodifikasikan serangkaian sh
fitur minimum yang pada dasarnya adalah Bourne plus beberapa hal. Sistem apa pun yang menamakan dirinya "Unix" harus mengimplementasikan setidaknya fitur-fitur ini. Sistem Unix Komersial biasanya menggunakan ksh sebagai POSIX sh, tetapi beberapa (misalnya OSF / 1 ) memiliki ksh mereka sendiri.
Baik cangkang Bourne maupun cangkang Korn adalah open source sampai saat ini, jadi ketika dunia Linux mulai terbentuk pada pertengahan 1990-an, mereka tidak tersedia. /bin/sh
pasti ada sesuatu yang lain. Sebagian besar distribusi Linux menggunakan bash , sebuah shell dari proyek GNU yang cenderung antara Bourne dan Korn dalam hal fitur scripting, dan jauh lebih baik daripada keduanya untuk penggunaan interaktif). Satu-satunya alternatif yang layak adalah pdksh ("domain publik Korn shell"), gratis (sekarang dihentikan, tetapi hidup sebagai mksh , yang dikembangkan secara aktif ), tetapi saya tidak ingat distribusi Linux menggunakan pdksh sebagai/bin/sh
, Saya tidak tahu mengapa, saya kira karena distribusi Linux selalu merupakan distribusi GNU / Linux, pada dasarnya mengirimkan versi GNU dari alat apa pun yang versi GNUnya ada.
Ada juga beberapa implementasi open source yang sh
disebut "abu", terutama shell Almquist , tetapi mereka sangat tidak lengkap, kurang beberapa fitur POSIX yang ingin digunakan orang. Seorang programmer yang adalah seorang pengelola Debian, Herbert Xu , memperluas abu untuk menjadikannya POSIX compliant. Akhirnya versinya diganti menjadi dash, dan ada beberapa dorongan untuk membuatnya /bin/sh
di Debian bukan bash. Ubuntu dimulai sebelum Debian mulai memperlakukan bashisme secara sistematis (penggunaan fungsi spesifik bash dalam #!/bin/sh
skrip) sebagai bug . Keduanya beralih kemudian ( Ubuntu 6.10 , Debian hanya pada tahun 2009 ( itu adalah tujuan untuk lenny tetapi saklar hanya dibuat setelah rilis lenny, yaitu dalam pemerasan)).
Sebuah besar alasan untuk menggunakan dasbor sebagai bukan pesta seperti /bin/sh
adalah bahwa hal itu secara signifikan lebih cepat. Ini sangat penting untuk Ubuntu, yang telah berusaha untuk menjaga waktu boot yang singkat sejak awal. Dash juga cenderung menggunakan lebih sedikit memori daripada bash, yang agak penting untuk skrip wrapper yang tinggal hanya untuk melakukan sedikit pembersihan ketika program yang mendasarinya keluar. Manfaat lain dari dash adalah bahwa ia hanya bergantung pada libc (pustaka sistem inti) sedangkan bash juga bergantung pada pustaka dukungan terminal (tidak dapat memulai tanpa mereka, bahkan untuk menjalankan skrip); ini berarti bahwa dasbor memiliki peluang lebih baik untuk terus bekerja pada sistem yang rusak.
Pada beberapa titik selama abad ke-21, cangkang Korn menjadi open source, dan versi open source dari cangkang Bourne muncul (versi lama, karena pengembangan telah berhenti bertahun-tahun sebelumnya). Tapi dash dan bash terlalu kuat mengakar di dunia Linux sehingga mereka tidak dapat diterima, terutama shell Bourne karena nilainya saat ini hanya historis. Dash menggusur bash karena memiliki manfaat yang jelas, tetapi tidak ada pesaing lain yang memiliki keunggulan yang menentukan /bin/sh
.