Bash digunakan secara default di setiap distribusi Linux yang saya coba, lebih dari alternatif seperti Z shell (zsh). Apakah ada alasan teknis atau historis untuk ini?
Bash digunakan secara default di setiap distribusi Linux yang saya coba, lebih dari alternatif seperti Z shell (zsh). Apakah ada alasan teknis atau historis untuk ini?
Jawaban:
Sejarah (diperoleh bukan melalui penelitian, tetapi melalui menghabiskan waktu terlalu banyak bergaul dengan orang-orang Bell Labs):
Pada awalnya (jika Anda menganggap awal sebagai Unix Versi 7) adalah shell Bourne. Steve Bourne adalah yang pertama menunjukkan bahwa shell yang mengendalikan interaksi pengguna bisa menjadi program pengguna dan bukan bagian khusus dari sistem operasi. Terobosan bersejarah. Shell itu sendiri relatif bersih untuk scripting, tetapi tidak memiliki pengeditan baris perintah atau kontrol pekerjaan. Pengantar Bourne untuk Unix Shell masih berguna untuk pengguna pemula hari ini.
Sunting : Saya mengabaikan beberapa "prasejarah" dari Ken Thompson dan John Mashey, juga dari Multics. Saya yakin Bourne mengetahui semua pekerjaan ini (dia berada di lab yang sama, 1127, di Bell Labs), tetapi cangkang Bourne adalah definitif, dan pekerjaan sebelumnya memiliki pengaruh yang kecil kecuali sebagaimana ditafsirkan oleh Steve Bourne. Sebagai contoh, meskipun Ken kemudian menulis kompiler Plan 9 C dan sangat berpengaruh pada Plan 9, tetapi makalah Tom Duff pada shell Plan 9 hanya menyebutkan shell Bourne, bukan pada Thompson.
Shell hanyalah program pengguna, jadi siapa pun dapat menulisnya. Saat Versi 7 Unix dibuat di New Jersey, Berkeley Unix dibuat di California. Bill Joy di Berkeley menulis csh
, C shell. Joy menambahkan kontrol pekerjaan dan sejarah, dan kemudian mengedit baris perintah, tetapi tidak menyadari pekerjaan Bourne dan berdasarkan bahasanya pada shell Thompson (yang saya anggap "prasejarah" dalam peluru sebelumnya). Komunitas Unix menyukai kontrol pekerjaan, tetapi mereka juga menyukai bahasa Bourne. Untuk polemik yang tidak terlalu baik terhadap bahasa csh, lihat Pemrograman Csh Dianggap Berbahaya . Untuk sementara waktu, banyak orang menggunakan secara csh
interaktif untuk fitur kontrol-pekerjaan dan sejarahnya, tetapi menggunakan Bourne sh
untuk menulis skrip. Situasi ini kurang ideal.
Sunting : Terima kasih kepada DigitalRoss untuk meluruskan saya pada kronologi csh
. Karena saya mendapatkan pendidikan dari orang-orang yang menyebut BSD sebagai "bidah Berkeley", saya kekurangan fakta di sana.
Dave Korn di Bell Labs melakukan rekayasa ulang brilian dari shell Bourne untuk menghasilkan shell Korn (ksh). Itu sepenuhnya kompatibel ke belakang dengan Bourne shell sh
tetapi memberikan banyak perbaikan yang tak ternilai. ksh
menjadi dasar standar POSIX dan dikirim standar dengan perangkat lunak Sun. (Ini terlepas dari kenyataan bahwa Bill Joy meninggalkan Berkeley untuk membantu menemukan Sun dan merupakan salah satu dari peranti lunak terkemuka mereka.)
Bell Labs dan AT&T dengan bodohnya gagal membuat ksh
open source. ksh88
digunakan secara luas, tetapi memiliki sumber tidak sah. Orang-orang tertentu menjadi sangat kecanduan sehingga mereka menjadi penjahat digital.
Sunting : Apakah ini benar-benar bodoh? Sulit diketahui. Berkeley sudah memberikan Unix pergi, dan perusahaan-perusahaan lain segera menyusul, tetapi ini masih merupakan era ketika Corporate Masters meyakini pengisian untuk Unix. Tetapi hasilnya: AT&T Unix sudah mati, setelah dijual ke berbagai pihak beberapa kali. BSD dan turunannya masih hidup dan baik, tetapi hal-hal baru yang disebut "Linux" dan "GNU" ini memiliki sebagian besar mindshare yang dulunya milik Bell Labs.
Free Software Foundation melakukan "clean-room", dari awal implementasi shell POSIX, mengambil semua ide Dave Korn seperti saat ini, ditambah dengan gaya FSF biasa menambahkan fitur baru mereka sendiri, seperti penyelesaian yang dapat diprogram. Mereka menyebutnya shell "Bourne lagi", atau bash
.
Pada pertengahan 1990-an AT&T open-source ksh93
, tetapi saat itu sudah terlambat untuk adopsi yang meluas. Perjanjian lisensi anehnya tidak standar. bash
dan ksh
menyimpang, dan ksh
tidak pernah mencapai pangsa pasar yang sepadan dengan tempatnya dalam sejarah.
Pelajaran:
Produk pertama yang memadai untuk memenangkan pasar (sh).
Orang-orang menyukai fitur-fitur baru (kontrol pekerjaan, penyelesaian perintah), tetapi mereka lebih menyukainya lagi ketika skrip lama mereka terus bekerja.
Sunting : Profesor teknik harus meninggalkan sejarah kepada sejarawan sains :-)
Bash memiliki dua hal yang sangat berbeda.
Kulitnya bagus. Ini adalah salah satu dari mungkin 2 cangkang (yang lainnya adalah zsh) yang mengintegrasikan beberapa csh
fitur keren seperti !
penggantian riwayat ke dalam sintaksis posix. Ini memiliki banyak ekstensi, termasuk array.
Ini adalah shell FSF / GNU. Di dunia open source, ini memberinya semacam cap.
Saya juga harus menambahkan bahwa itu tidak selalu default. ash
sering digunakan sebagai / bin / sh sehingga sementara bash
mungkin shell interaktif, ash
adalah shell "jalankan file perintah". Ini karena ash
lebih kecil dan lebih cepat, dan berisi fitur-fitur posix, jadi ini adalah subset yang tepat. Menggunakan ash
sebagai shell interaktif terkadang bermasalah. Pada, katakanlah, NetBSD, ia bekerja dengan baik, karena di sana ia dibangun dengan semua fitur. Ini semacam shell mereka sedangkan bash
paket eksternal. Tetapi di Linux ash
biasanya dianggap non-interaktif, sehingga mereka mengkompilasinya tanpa sejarah dan tanpa mengedit baris (penting) pada teori bahwa itu hanya digunakan untuk menjalankan gnu configure
skrip besar itu .
Sejarah nyata shell
UPDATE: Ada sejarah yang tidak akurat dari shell yang disalin dari satu tempat ke tempat di web, dan orang-orang dapat memercayainya. Saya akan mencoba memberikan versi yang akurat dan memberikan beberapa tautan untuk membuktikannya di sini.
<, >, >>, |, &
tetapi hanya memiliki goto
sintaks kontrol sederhana melalui program eksternal yang mencari input standar. Tidak ada skrip shell kompleks saat itu. Shell selanjutnya akan membuka input perintah pada fd yang terpisah. Ini mungkin terlihat sederhana hari ini tetapi dalam film horor yang merupakan komputasi tahun 1970-an itu adalah hal terbaik di dunia. Percaya atau tidak, shell kuno ini memiliki aliran twitter sendiri hari ini dan, tentu saja, beranda .csh
, ditulis (seperti vi
) oleh Bill Joy di UCB. Ini terjadi sebelum GNU readline dan NetBSD editline, jadi pasti masuk akal untuk melakukan histori dengan !
sintaksis. Csh menambahkan sebagian besar fitur shell hari ini tetapi dengan sintaks csh. csh tidak mengubah sintaksis apa pun , gratis atau tidak. Ini sebenarnya kompatibel dengan shell Thompson, dan awalnya termasuk kode sumber TS.osh
dan csh
tetap populer selama beberapa waktu . Tidak ada internet dan itu lisensi SW, jadi di lingkungan itu ada kemungkinan bahwa Stephen Bourne tidak tahu tentang kulit Joy dan tentu saja Joy tidak tahu tentang Bourne. Ada kemungkinan bahwa kedua shell pertama kali bertemu ketika UCB mendapat VAX dan pra-rilis dari Unix / 32V yang sekarang dilupakan . Saya ingat Bill mengeluh tentang alokasi memori. Perhatikan bahwa kedua shell kompatibel ke belakang ke shell V6, mereka hanya memperpanjang sintaks ke arah yang berbeda. ksh
. Akhirnya, csh
memiliki kode sumber semi-tersedia, tetapi diikat dalam gugatan antara AT&T dan University of California . Namun, ini adalah hari-hari kejayaan BSD Unix ketika perusahaan-perusahaan canggih yang mampu membayar biaya $ 50.000 akan membeli lisensi AT&T tetapi menginstal distribusi 4.x BSD, dan universitas mendapatkannya secara gratis.csh
sintaksis seperti halnya sintaksis Bourne shell, dan beberapa menggabungkan keduanya. Anda memiliki setidaknya tcsh
, zsh
, bash
, dan ash
. Sintaks Bourne adalah "resmi", menjadi bagian dari rilis AT&T, tetapi pada masa itu BSD cukup penting, dan Sun, awalnya BSD, mendistribusikan cukup banyak Unix SW yang ditemui dunia./bin
dan /sbin
tergantung pada /usr
, itu rusak dan perlu diperbaiki; mereka hanya bergantung pada perpustakaan di /lib
. Hanya login
membutuhkan PAM; "API yang lebih baru" yang membutuhkan lib dinamis adalah NSS. "Tren ke"? NetBSD 2.0 sudah beralih ke yang sepenuhnya dinamis /bin
dan /sbin
5 tahun yang lalu, FreeBSD 5.2 lebih lama, dan Linux ... well, itu berbeda-beda menurut distro, tapi itu sudah lama juga.
Untuk menambahkan apa yang dikatakan @DigitalRoss
Karena Linux hanyalah Kernel (dan hal-hal dukungan yang diperlukan) sementara GNU menyediakan (atau memang menyediakan) semua klon perangkat lunak Unix dasar yang membuat apa yang kita sebut "Linux" dapat digunakan. Bash adalah shell proyek GNU yang ditulis sebagai tiruan dari Bourne shell (sh) lama dari Unix Version 7.
Menurut survei unix.com, ini tidak terlalu jauh di depan ksh.
/ bin / sh 83 8,96%
/ bin / csh 36 3,89%
/ bin / ksh 370 39,96%
/ bin / tcsh 36 3,89%
/ bin / bash 401 43,30%
Bash diterima secara luas karena serangkaian fiturnya yang kaya. Ini juga mengadopsi fitur dari shell lain seperti C-shell dan Korn-shell. Silakan lihat serangkaian fitur ini.
Karena 'bash' 100% 'sh / ksh' compatable dan 'ksh' adalah shell POSIX.
Jadi jika Anda menginginkan sistem yang sesuai dengan POSIX, dan Anda menggunakan Linux maka Anda menggunakan bash.
Jika Anda menggunakan unix komersial, Anda biasanya mendapatkan ksh sebagai shell default (kadang-kadang hanya sh lama). Untuk beberapa alasan Sun masih default ke c-shell flakey.
Keuntungannya adalah portabilitas .sh yang ditulis untuk hp-ux atau AIX memiliki peluang bagus untuk dijalankan sebagai linux 'bash' tanpa perubahan apa pun.
Dan untuk menambahkan semua jawaban lain: zsh
tidak dimaksudkan untuk kompatibel. Anda mungkin dapat mengaturnya agar kompatibel, tetapi kemudian Anda kehilangan fitur-fiturnya.
Saya lakukan menggunakan zsh
sebagai shell reguler interaktif saya, tapi bash
/ dash
tampak lebih waras untuk saya sebagai bahasa scripting shell; mereka melakukan sedikit sihir dan lebih dapat diprediksi ... ini lebih penting bagi saya ketika saya sedang menulis naskah yang dimaksudkan untuk bekerja selama beberapa tahun.
Hanya untuk membingungkan masalah, sh
perintah kadang - kadang hanya tautan simbolis ke program shell lain, seperti ash
, bash
atau dash
.
Ubuntu digunakan untuk menghubungkannya bash
, karena bash
dirancang untuk menjalankan skrip Bourne shell yang sesuai.
Namun, baru-baru ini Ubuntu beralih ke memiliki sh
tautan ke dash
. dash
dirancang untuk menjalankan bash
skrip (dan karenanya juga sh
skrip), tetapi dirancang untuk digunakan hanya untuk skrip, sehingga tidak memiliki fitur interaktif bash
. Itu membuatnya lebih kecil dan (mungkin) lebih cepat.