Mengapa Bash ada di mana-mana (dalam sebagian besar jika tidak semua distribusi Linux)


50

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?


1
Ini bukan. Pada sistem FreeBSD saya tcsh adalah shell default!

54
Sistem FreeBSD Anda bukan distro Linux.

8
Tuhan melarang ada beberapa konsistensi antara distro ...
OMG Ponies

4
Tidak, tapi itu milik "di mana-mana" :)

Jawaban:


106

Sejarah (diperoleh bukan melalui penelitian, tetapi melalui menghabiskan waktu terlalu banyak bergaul dengan orang-orang Bell Labs):

  1. 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.

  2. 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 cshinteraktif untuk fitur kontrol-pekerjaan dan sejarahnya, tetapi menggunakan Bourne shuntuk 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.

  3. 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 shtetapi memberikan banyak perbaikan yang tak ternilai. kshmenjadi 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.)

  4. Bell Labs dan AT&T dengan bodohnya gagal membuat kshopen source. ksh88digunakan 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.

  5. 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.

  6. Pada pertengahan 1990-an AT&T open-source ksh93, tetapi saat itu sudah terlambat untuk adopsi yang meluas. Perjanjian lisensi anehnya tidak standar. bashdan kshmenyimpang, dan kshtidak 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 :-)


Saya pikir Anda benar-benar memiliki penjelasan paling lengkap dan akurat untuk popularitas bash atas yang lainnya. Saya telah melihat lingkungan yang default ke zsh dan saya membenci mereka karena semua sintaksnya hanya sedikit dan saya tidak bisa mengetahuinya atau saya membuat kesalahan.

Bullet (1) perlu diperbaiki: sebelum shell Bourne adalah shell Mashey, dan sebelum shell Mashey adalah ur-Shell, shell Ken Thompson. Lihat en.wikipedia.org/wiki/Unix_shell
Jim Ferrans

2
Tanpa menyalahkan Norman secara khusus, ada banyak ketidakakuratan di sini. Ken Thompson menulis shell pertama, yang merupakan satu-satunya shell melalui V6 dan digunakan secara paralel di V7 dan 32V. Stephen Bourne bukan penulis shell "pertama", ia menulis ulang shell KT. Csh tidak memiliki kontrol pekerjaan hingga 4.1BSD, meskipun itu adalah shell pertama yang mendapatkannya. Csh tidak mengubah sintaksis shell, itu kompatibel dengan shell V6, seperti halnya shell Bourne. Hampir semua kode dilisensikan pada masa itu. Apa yang sebenarnya bodoh tentang membebankan biaya lisensi untuk Unix?
DigitalRoss

2
Saya mungkin tidak menjelaskan ini dengan baik, biarkan saya coba lagi. Csh ada sebelum Bourne , atau paling tidak adalah implementasi paralel sebuah benua. (Sebelum internet, itu penting.) Saya duduk di sebelah Bill Joy di Cory Hall, kadang-kadang, ketika dia menulisnya; Saya benar-benar dapat meyakinkan Anda bahwa dia menulisnya di V6. Seperti yang saya katakan, csh (dan Bourne) kompatibel dengan V6-Thompson-backward, karena hanya itulah yang ada ketika mereka menulisnya. Tentu saja itu tidak kompatibel dengan Bourne, talenta AFAIK Bill Joy tidak termasuk melihat masa depan
DigitalRoss

1
Tidak bashmengambil gagasan penyelesaian terprogram dari tcsh?

46

Bash memiliki dua hal yang sangat berbeda.

  1. Kulitnya bagus. Ini adalah salah satu dari mungkin 2 cangkang (yang lainnya adalah zsh) yang mengintegrasikan beberapa cshfitur keren seperti !penggantian riwayat ke dalam sintaksis posix. Ini memiliki banyak ekstensi, termasuk array.

  2. Ini adalah shell FSF / GNU. Di dunia open source, ini memberinya semacam cap.

Saya juga harus menambahkan bahwa itu tidak selalu default. ashsering digunakan sebagai / bin / sh sehingga sementara bashmungkin shell interaktif, ashadalah shell "jalankan file perintah". Ini karena ashlebih kecil dan lebih cepat, dan berisi fitur-fitur posix, jadi ini adalah subset yang tepat. Menggunakan ashsebagai shell interaktif terkadang bermasalah. Pada, katakanlah, NetBSD, ia bekerja dengan baik, karena di sana ia dibangun dengan semua fitur. Ini semacam shell mereka sedangkan bashpaket eksternal. Tetapi di Linux ashbiasanya dianggap non-interaktif, sehingga mereka mengkompilasinya tanpa sejarah dan tanpa mengedit baris (penting) pada teori bahwa itu hanya digunakan untuk menjalankan gnu configureskrip besar itu .

Kisah Dua Kerang

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.

  1. Shell pertama pastinya bukan shell Bourne tetapi ditulis oleh Ken Thompson sendiri dan didistribusikan di V6, yang merupakan versi AT&T yang dikirim ke berbagai universitas dan laboratorium pemerintah. Inilah yang menempatkan Unix di peta. Itu memiliki semua dasar-dasarnya, <, >, >>, |, &tetapi hanya memiliki gotosintaks 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 .
  2. Kulit kedua itu 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.
  3. Shell ketiga adalah shell Bourne, dengan sintaks yang berbeda. Unix sedang dikembangkan secara paralel di UCB dan AT&T. Shell ini memiliki pengalokasi memori yang aneh (saya pikir itu hanya menggunakan lebih banyak memori, terjebak SIGSEGV, melakukan brk baru (2), dan kemudian mencoba lagi) yang membuatnya sulit dijalankan pada port Unix baru, jadi oshdan cshtetap 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.
  4. Sekarang benar-benar ada beberapa shell yang tidak kompatibel, yang ditambahkan AT&T ke Bourne-compatible ksh. Akhirnya, cshmemiliki 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.
  5. Dalam situasi ini dengan banyak masalah hukum dan teknis, berbagai implementasi independen dilakukan. Setidaknya banyak yang menggunakan cshsintaksis 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.
  6. Sebagian karena gugatan USL, FSF dan Linux memiliki bidang terbuka. Sementara itu, AT&T telah berhasil berkelahi dengan salah satu dari beberapa entitas di bumi yang lebih besar daripada mereka (Negara Bagian California) dan pada akhirnya mereka tidak memenangkan gugatan tersebut, dan akhirnya distribusi BSD menggunakan hukum perusahaan. pijakan. Tetapi pada saat itu Linux dan bash ada di mana-mana, dan hari ini BSD adalah ceruk.
  7. Akhirnya, bash adalah cangkang yang bagus (meskipun tampaknya tidak diakui secara pribadi oleh penulis aslinya) dan bash layak mendapatkan pujian atas keberhasilannya sendiri. csh akan dikalahkan oleh tcsh dan zsh bahkan jika abu, bash, dan ksh tidak memenangkan perang sintaksis.

Juga, / bin / sh perlu dihubungkan secara statis.

Jika ada /bindan /sbintergantung pada /usr, itu rusak dan perlu diperbaiki; mereka hanya bergantung pada perpustakaan di /lib. Hanya loginmembutuhkan PAM; "API yang lebih baru" yang membutuhkan lib dinamis adalah NSS. "Tren ke"? NetBSD 2.0 sudah beralih ke yang sepenuhnya dinamis /bindan /sbin5 tahun yang lalu, FreeBSD 5.2 lebih lama, dan Linux ... well, itu berbeda-beda menurut distro, tapi itu sudah lama juga.
ephemient

2
Saya ingin memperjelas bahwa jawaban saya adalah karya asli saya; tidak ada kata yang disalin dari mana saja.
Norman Ramsey

1
Tentu, saya tidak bermaksud Anda menempelkannya, hanya saja ada banyak informasi yang salah di sekitar dan saya tidak ingin menampar Anda karena melaporkan kisah yang sudah disalahpahami.
DigitalRoss

6

Untuk menambahkan apa yang dikatakan @DigitalRoss

  • Bash adalah pengganti superset lengkap untuk posix-sh, bahkan ke titik jika disebut sebagai / bin / sh akan sepenuhnya meniru posix-sh. Posix-sh adalah "standar" untuk sistem unix komersial sebagai shell common-denominator. Jadi, sesuatu yang dimulai di sana dan dibangun di atasnya dimulai dengan banyak.

4

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.


dia tidak bertanya "mengapa ada program shell"
hasen

@hasen j: Pertanyaannya adalah apakah ada alasan historis mengapa semua sistem Linux yang digunakannya default untuk Bash sebagai shell.
beggs

2
@ telah j: beggs tidak menjawab "mengapa ada program shell". Anda telah melewatkan inti jawabannya, seperti halnya semua downvoter SO-brengsek SO lainnya jelas.

1

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%


0

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.


0

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.


kshbukan shell POSIX . Tidak ada yang namanya shell POSIX . Ada cangkang yang sesuai dengan spesifikasi POSIX, yang kshmerupakan salah satunya, tetapi tidak berarti satu-satunya.

0

Dan untuk menambahkan semua jawaban lain: zshtidak dimaksudkan untuk kompatibel. Anda mungkin dapat mengaturnya agar kompatibel, tetapi kemudian Anda kehilangan fitur-fiturnya.

Saya lakukan menggunakan zshsebagai shell reguler interaktif saya, tapi bash/ dashtampak 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.


0

Hanya untuk membingungkan masalah, shperintah kadang - kadang hanya tautan simbolis ke program shell lain, seperti ash, bashatau dash.

Ubuntu digunakan untuk menghubungkannya bash, karena bashdirancang untuk menjalankan skrip Bourne shell yang sesuai.

Namun, baru-baru ini Ubuntu beralih ke memiliki shtautan ke dash. dashdirancang untuk menjalankan bashskrip (dan karenanya juga shskrip), tetapi dirancang untuk digunakan hanya untuk skrip, sehingga tidak memiliki fitur interaktif bash. Itu membuatnya lebih kecil dan (mungkin) lebih cepat.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.