Yang mengatakan, shell Korn - sebagai hal yang berbeda dari shell POSIX - tidak pernah benar-benar menjadi populer di luar dunia komersial Unix. Ini karena kenaikannya berhubungan dengan tahun-tahun awal komersialisasi Unix, sehingga terperangkap dalam perang Unix . BSD Unix menolak untuk mendukung shell C, dan kode sumbernya tidak tersedia secara bebas untuk digunakan di Linux ketika dimulai. "Jadi, ketika distributor Linux awal mencari shell perintah untuk pergi dengan kernel Linux mereka, mereka biasanya memilih GNU Bash , salah satu dari yang sh
kompatibel yang Anda bicarakan .⁶
Hubungan awal antara Linux dan Bash itu cukup menyegel nasib banyak shell lain, termasuk ksh
, csh
dan tcsh
. Masih ada banyak yang masih menggunakan kerang-kerang itu hari ini, tetapi mereka sangat minoritas .⁷
Saya menggunakan "shell script" di atas sebagai istilah umum yang berarti skrip shell Bourne / POSIX. Ini disebabkan oleh keberadaan cangkang keluarga Bourne. Untuk berbicara tentang skrip pada shell lain, Anda perlu memberikan kualifikasi, seperti "skrip shell C." Bahkan pada sistem di mana shell keluarga C adalah shell interaktif default, lebih baik menggunakan shell Bourne untuk skrip.
Ada banyak cara untuk memeriksa apakah skrip shell Bourne yang diberikan itu portabel:
Versi awal BSD Unix hanyalah koleksi perangkat lunak tambahan untuk V6 Unix. Karena shell Bourne tidak ditambahkan ke AT&T Unix hingga V7, BSD secara teknis tidak memulai memiliki shell Bourne. Jawaban BSD untuk sifat primitif dari shell Thompson adalah C shell .
Namun demikian, versi standalone pertama BSD (2.9BSD dan 3BSD) didasarkan pada V7 atau penggantinya portabel UNIX / 32V , sehingga mereka melakukan termasuk shell Bourne.
(Garis 2BSD berubah menjadi garpu paralel BSD untuk minikomputer PDP Digital , sedangkan jalur 3BSD dan 4BSD melanjutkan untuk mengambil keuntungan dari jenis komputer yang lebih baru seperti Vaxen dan Unix workstation . 2.9BSD pada dasarnya adalah versi PDP dari 4.1cBSD; mereka adalah kontemporer, dan kode bersama . PDPs tidak hilang begitu saja ketika VAX tiba, sehingga garis 2BSD ini masih terhuyung-huyung sepanjang .)
Aman untuk mengatakan bahwa kulit Bourne ada di mana-mana di dunia Unix pada tahun 1983. Itu perkiraan yang baik untuk "selamanya" di industri komputasi. MS-DOS memiliki sistem file hierarkis tahun itu (awww, how cuuute!) Dan Macintosh 24-bit pertama dengan layar B&W 9 "- bukan grayscale, secara harfiah hitam dan putih - tidak akan keluar hingga awal tahun berikutnya.
Kerang Thompson cukup primitif menurut standar saat ini. Itu hanya shell perintah interaktif, daripada lingkungan pemrograman skrip yang kita harapkan hari ini. Itu memang memiliki hal-hal seperti pipa dan I / O redirection, yang kami anggap sebagai bagian prototipe dari "shell Unix," sehingga kami berpikir tentang shell perintah MS-DOS yang mendapatkannya dari Unix.
Cangkang Bourne juga menggantikan cangkang PWB , yang menambahkan hal-hal penting ke cangkang Thompson seperti programabilitas ( if
, switch
dan while
) dan bentuk awal dari variabel lingkungan. Shell PWB bahkan kurang diingat daripada shell Thompson karena itu bukan bagian dari setiap versi Unix.
Ketika seseorang tidak spesifik tentang kompatibilitas shell POSIX vs Bourne, ada banyak hal yang bisa mereka maksudkan.
Pada satu ekstrim, mereka bisa menggunakan shell Bourne 1979 sebagai dasar mereka. Sebuah " sh
-yang kompatibel script" dalam pengertian ini berarti diharapkan untuk berjalan dengan sempurna pada shell Bourne benar atau salah penerus dan klon: ash
, bash
, ksh
, zsh
, dll
Seseorang di ekstrem yang lain menganggap shell yang ditentukan oleh POSIX sebagai baseline. Kami mengambil begitu banyak fitur shell POSIX sebagai "standar" hari ini sehingga kami sering lupa bahwa mereka tidak benar-benar hadir dalam shell Bourne: built-in aritmatika, kontrol pekerjaan, riwayat perintah, alias, pengeditan baris perintah, $()
bentuk perintah substitusi, dll.
Meskipun shell Korn berakar kembali ke awal 1980-an, AT&T tidak mengirimkannya di Unix hingga System V Release 4 pada tahun 1988. Karena begitu banyak Unix komersial didasarkan pada SVR4, ini memasukkan ksh
hampir semua iklan Unix yang relevan dari akhir 1980-an dan seterusnya.
(Beberapa rasa Unix yang aneh berdasarkan pada SVR3 dan sebelumnya memegang potongan pasar melewati rilis SVR4, tetapi mereka adalah yang pertama melawan tembok ketika revolusi datang.)
1988 juga merupakan tahun standar POSIX pertama keluar, dengan shell Korn berbasis "POSIX shell." Kemudian, pada tahun 1993, versi yang lebih baik dari shell Korn keluar. Karena POSIX secara efektif memaku yang asli di tempat, ksh
bercabang menjadi dua versi utama: ksh88
dan ksh93
, dinamai setelah bertahun-tahun terlibat dalam perpecahan mereka.
ksh88
tidak sepenuhnya kompatibel dengan POSIX, meskipun perbedaannya kecil, sehingga beberapa versi ksh88
shell ditambal agar kompatibel dengan POSIX. (Ini dari wawancara yang menarik tentang Slashdot dengan Dr. David G. Korn . Ya, pria yang menulis shell.)
ksh93
adalah superset yang sepenuhnya kompatibel dari shell POSIX . Pengembangan ksh93
telah sporadis sejak repositori sumber utama pindah dari AT&T ke GitHub dengan rilis terbaru sekitar 3 tahun saat saya menulis ini, ksh93v. (Nama dasar proyek tetap ksh93
dengan akhiran yang ditambahkan untuk menunjukkan versi rilis di luar tahun 1993.)
Sistem yang menyertakan cangkang Korn sebagai hal yang terpisah dari cangkang POSIX biasanya menjadikannya tersedia /bin/ksh
, meskipun terkadang bersembunyi di tempat lain.
Ketika kita berbicara tentang ksh
atau shell Korn dengan nama, kita berbicara tentang ksh93
fitur yang membedakannya dari subset shell Bourne dan POSIX yang kompatibel ke belakang. Anda jarang menemukan yang murni ksh88
hari ini.
AT&T menyimpan kode sumber shell milik Korn hingga Maret 2000 . Pada saat itu, hubungan Linux dengan GNU Bash sangat kuat. Bash dan ksh93
masing-masing memiliki kelebihan di atas yang lain , tetapi pada saat ini kelembaman membuat Linux terkait erat dengan Bash.
Mengapa vendor Linux awal yang paling sering memilih GNU Bash lebih pdksh
, yang adalah tersedia pada saat Linux memulai, aku rasa itu karena begitu banyak sisa userland juga datang dari proyek GNU . Bash juga agak lebih maju daripada pdksh
, karena pengembang Bash tidak membatasi diri untuk menyalin fitur shell Korn.
Pekerjaan pdksh
berhenti ketika AT&T merilis kode sumber ke shell Korn yang sebenarnya. Ada dua garpu utama yang masih dipertahankan, yaitu: OpenBSD pdksh
dan MirBSD Korn Shellmksh
,.
Saya merasa menarik bahwa mksh
adalah satu-satunya implementasi shell Korn yang saat ini dikemas untuk Cygwin.
GNU Bash melampaui POSIX dalam banyak hal, tetapi Anda dapat memintanya untuk berjalan dalam mode POSIX yang lebih murni .
csh
/ tcsh
Biasanya default shell interaktif BSD Unix melalui awal 1990-an.
Menjadi varian BSD , versi awal Mac OS X adalah cara ini, melalui Mac OS X 10.2 "Jaguar" . OS X mengalihkan shell default dari tcsh
ke Bash di OS X 10.3 "Panther" . Perubahan ini tidak memengaruhi sistem yang ditingkatkan dari 10.2 atau sebelumnya. Pengguna yang ada pada sistem yang dikonversi menyimpan tcsh
cangkang mereka .
FreeBSD mengklaim masih menggunakan tcsh
shell default , tetapi pada FreeBSD 10 VM yang saya miliki di sini, shell default tampaknya menjadi salah satu varian shell Almquist yang kompatibel dengan POSIX . Ini juga berlaku di NetBSD.
OpenBSD menggunakan garpu pdksh
sebagai shell default sebagai gantinya.
Semakin populernya Linux dan OS X membuat beberapa orang berharap FreeBSD juga akan beralih ke Bash, tetapi mereka tidak akan melakukannya dalam waktu dekat karena alasan filosofis . Hal ini mudah untuk beralih , jika ini mengganggu Anda.
Sangat jarang menemukan sistem dengan cangkang Bourne vanilla yang benar-benar seperti saat /bin/sh
ini. Anda harus keluar dari cara Anda untuk menemukan sesuatu yang cukup dekat untuk pengujian kompatibilitas.
Saya mengetahui hanya satu cara untuk menjalankan shell Bourne vintage tahun 1979 yang asli pada komputer modern: gunakan gambar disk Ancient Unix V7 dengan simulator SIMH PDP-11 dari Computer History Simulation Project . SIMH berjalan di hampir setiap komputer modern , bukan hanya yang mirip Unix. SIMH bahkan berjalan di Android dan iOS .
Dengan OpenSolaris , Sun membuka versi SVR4 shell Bourne untuk pertama kalinya. Sebelum itu, kode sumber untuk versi post-V7 dari shell Bourne hanya tersedia bagi mereka yang memiliki lisensi kode sumber Unix.
Kode itu sekarang tersedia secara terpisah dari sisa proyek OpenSolaris yang sudah tidak beroperasi dari beberapa sumber yang berbeda.
Sumber paling langsung adalah proyek shell Heirloom Bourne . Ini menjadi tersedia segera setelah rilis OpenSolaris asli tahun 2005. Beberapa pekerjaan portabilitas dan perbaikan bug dilakukan selama beberapa bulan ke depan, tetapi kemudian pengembangan proyek terhenti.
Jörg Schilling telah melakukan pekerjaan yang lebih baik dalam mempertahankan versi kode ini seperti osh
dalam paket Schily Tools-nya . Lihat di atas untuk informasi lebih lanjut tentang ini.
Perlu diingat bahwa shell ini berasal dari rilis kode sumber 2005 berisi dukungan set karakter multi-byte , kontrol pekerjaan, fungsi shell , dan fitur lainnya yang tidak ada dalam shell Bourne 1979 yang asli.
Salah satu cara untuk mengetahui apakah Anda menggunakan shell Bourne asli adalah untuk melihat apakah ia mendukung fitur tidak berdokumen yang ditambahkan untuk memudahkan transisi dari shell Thompson: ^
sebagai alias untuk |
. Dengan kata lain, perintah like ls ^ more
akan memberikan kesalahan pada shell tipe Korn atau POSIX, tetapi akan berperilaku seperti ls | more
pada shell Bourne yang benar.
Kadang-kadang Anda menemukan fish
, scsh
atau rc/es
patuh, tetapi mereka bahkan lebih jarang daripada penggemar shell C.
The rc
keluarga kerang tidak umum digunakan pada sistem Unix / Linux, tapi keluarga secara historis penting, yang adalah bagaimana mendapatkan tempat dalam diagram di atas. rc
adalah shell standar Plan 9 dari sistem operasi Bell Labs , sejenis penerus Unix edisi 10 , yang dibuat sebagai bagian dari penelitian lanjutan Bell Labs mengenai desain sistem operasi. Ini tidak kompatibel dengan cangkang Bourne dan C pada tingkat pemrograman; mungkin ada pelajaran di sana.
Varian yang paling aktif rc
adalah yang dipelihara oleh Toby Goodwin , yang didasarkan pada rc
klon Unix oleh Byron Rakitzis.
sh
). Untuk shell yang berbeda, ini mengacu pada apakah shell dapat menjalankan skrip Bourne shell atau tidak.