คำตอบ:
ประวัติความเป็นมา (ไม่ได้มาจากการวิจัย แต่ผ่านการใช้เวลากับคน Bell Labs มากเกินไป):
ในการเริ่มต้น (ถ้าคุณพิจารณาว่าการเริ่มต้นเป็น Unix เวอร์ชัน 7) คือ Bourne shell Steve Bourne เป็นคนแรกที่แสดงให้เห็นว่าเชลล์ที่ควบคุมการโต้ตอบของผู้ใช้อาจเป็นโปรแกรมผู้ใช้ไม่ใช่ส่วนพิเศษของระบบปฏิบัติการ ความก้าวหน้าทางประวัติศาสตร์ เชลล์เองค่อนข้างสะอาดสำหรับการเขียนสคริปต์ แต่ไม่มีการแก้ไขบรรทัดคำสั่งหรือการควบคุมงาน ข้อมูลเบื้องต้นของ Bourne เกี่ยวกับ Unix Shellยังคงมีประโยชน์สำหรับผู้ใช้ที่เริ่มต้นวันนี้
แก้ไข : ฉันไม่สนใจ "prehistory" จาก Ken Thompson และ John Mashey บางส่วนจาก Multics ฉันแน่ใจว่าบอร์นตระหนักถึงงานนี้ทั้งหมด (เขาอยู่ในแล็บเดียวกัน, 1127, ที่เบลล์แล็บส์) แต่เชลล์ของบอร์นนั้นชัดเจนและงานก่อนหน้านี้มีอิทธิพลเพียงเล็กน้อยยกเว้นที่ตีความโดยสตีฟบอร์น ตัวอย่างเช่นแม้ว่าเคนจะเขียนคอมไพเลอร์ Plan 9 C และมีอิทธิพลอย่างมากต่อ Plan 9 แต่กระดาษของ Tom Duff บนเชลล์ Plan 9 (rc) กล่าวถึงเฉพาะเชลล์ของ Bourne ไม่ใช่ Thompson's
เชลล์เป็นเพียงโปรแกรมผู้ใช้ดังนั้นทุกคนสามารถเขียนได้ เมื่อมีการสร้าง Unix รุ่น 7 ในรัฐนิวเจอร์ซีย์ Berkeley Unix ก็ถูกสร้างขึ้นในแคลิฟอร์เนีย Bill Joy ที่ Berkeley เขียนว่าcsh
C เชลล์ Joy เพิ่มการควบคุมงานและประวัติและการแก้ไขบรรทัดคำสั่งในภายหลัง แต่ไม่ได้ตระหนักถึงงานของ Bourne และใช้ภาษาของเขาบนเชลล์ Thompson (ซึ่งฉันคิดว่า "ยุคก่อนประวัติศาสตร์" ในกระสุนก่อนหน้า) ชุมชน Unix รักการควบคุมงาน แต่พวกเขาก็รักภาษาของบอร์นด้วย สำหรับการทะเลาะไม่ได้โดยเฉพาะอย่างยิ่งดีกับภาษา csh ดูโปรแกรม CSH พิจารณาอันตราย หลายครั้งที่คนจำนวนมากใช้csh
การโต้ตอบเพื่อควบคุมคุณสมบัติและประวัติความเป็นมา แต่ใช้ Bourne's sh
เพื่อเขียนสคริปต์ สถานการณ์นี้น้อยกว่าอุดมคติ
แก้ไข : ขอบคุณที่ DigitalRoss csh
สำหรับการยืดผมออกมาในเหตุการณ์ของ เนื่องจากฉันได้รับการศึกษาจากคนที่อ้างถึง BSD ในฐานะ "คนนอกรีตแห่งเบิร์กลีย์" ฉันจึงไม่ค่อยเข้าใจข้อเท็จจริงที่นั่น
Dave Korn ที่ Bell Labs ทำการปรับโครงสร้างของบอร์นเชลล์ใหม่เพื่อผลิต Korn เชลล์ (ksh) มันเข้ากันได้อย่างสมบูรณ์แบบย้อนหลังกับ Bourne shell sh
แต่ให้การปรับปรุงที่ล้ำค่า ksh
กลายเป็นพื้นฐานของมาตรฐาน POSIX และส่งมอบมาตรฐานพร้อมซอฟต์แวร์ของ Sun (สิ่งนี้แม้จะมีข้อเท็จจริงที่ว่าบิลจอยจากเบิร์กลีย์ไปช่วยพบซอนและเป็นหนึ่งในผู้นำด้านซอฟต์แวร์ของพวกเขา)
Bell Labs และ AT&T ล้มเหลวอย่างมากในการสร้างksh
โอเพนซอร์ส ksh88
ใช้กันอย่างแพร่หลาย แต่การมีแหล่งข้อมูลไม่ถูกกฎหมาย คนบางคนติดจนกลายเป็นอาชญากรดิจิทัล
แก้ไข : นี่โง่จริงๆเหรอ? ยากที่จะรู้ เบิร์กลีย์กำลังแจกจ่ายยูนิกซ์ไปแล้วและ บริษัท อื่น ๆ ก็จะตามมาในไม่ช้า แต่นี่ก็ยังเป็นยุคที่หัวหน้า บริษัท เชื่อในการเรียกเก็บเงินจากยูนิกซ์ แต่ผลลัพธ์: AT&T Unix นั้นตายไปแล้วหลังจากถูกขายให้กับหลาย ๆ ฝ่ายในหลาย ๆ ครั้ง BSD และตราสารอนุพันธ์นั้นยังมีชีวิตอยู่และดี แต่สิ่งที่พุ่งพรวดเหล่านี้เรียกว่า "Linux" และ "GNU" มีความคิดส่วนใหญ่ที่ครั้งหนึ่งเคยเป็นของ Bell Labs
Free Software Foundation ทำ "clean-room" ตั้งแต่เริ่มต้นการใช้งาน POSIX shell โดยนำแนวคิดทั้งหมดของ Dave Korn มาใช้ในปัจจุบันและในรูปแบบ FSF ตามปกติเพิ่มคุณสมบัติใหม่ของตัวเองเช่นโปรแกรมที่เสร็จสมบูรณ์ พวกเขาเรียกมันว่า "บอร์นอีกครั้ง" bash
เปลือกหรือ
ในช่วงกลางยุค 90 AT&T โอเพ่นซอร์สksh93
แต่ตอนนี้มันยังสายเกินไปที่จะยอมรับอย่างกว้างขวาง ข้อตกลงใบอนุญาตไม่ได้มาตรฐานอย่างแปลก bash
และksh
แตกต่างและksh
ไม่เคยประสบความสำเร็จส่วนแบ่งการตลาดที่สอดคล้องกับสถานที่ในประวัติศาสตร์
บทเรียน:
ผลิตภัณฑ์ที่เพียงพอสำหรับการทำตลาดครั้งแรก (ด)
ผู้คนต่างชื่นชอบคุณสมบัติใหม่ ๆ (การควบคุมงานการทำให้คำสั่งสำเร็จ) แต่พวกเขารักพวกเขามากยิ่งขึ้นเมื่อสคริปต์เก่าของพวกเขายังคงทำงานต่อไป
แก้ไข : อาจารย์ด้านวิศวกรรมควรปล่อยให้ประวัติศาสตร์ประวัติศาสตร์วิทยาศาสตร์ :-)
Bash มีสองสิ่งที่แตกต่างอย่างสิ้นเชิง
มันเป็นเปลือกที่ดี มันเป็นหนึ่งในบางที 2 เชลล์ (อีกอันคือ zsh) ที่รวมเอาcsh
คุณสมบัติเจ๋ง ๆ บางอย่างเช่นการ!
ทดแทนประวัติลงในไวยากรณ์ posix มีส่วนขยายมากมายรวมถึงอาร์เรย์
เป็นเชลล์ FSF / GNU ในโลกโอเพนซอร์สสิ่งนี้ทำให้มันเป็นเหมือนตราประทับ
ฉันควรเพิ่มว่ามันไม่ได้เป็นค่าเริ่มต้นเสมอ ash
มักใช้เป็น / bin / sh เพื่อที่ในขณะที่bash
อาจเป็นเชลล์แบบโต้ตอบash
คือเชลล์"เพิ่งรันไฟล์คำสั่ง" เนื่องจากash
มีขนาดเล็กและเร็วกว่าและมีคุณสมบัติ posix ดังนั้นจึงเป็นชุดย่อยที่เหมาะสม การใช้ash
เป็นเชลล์แบบโต้ตอบบางครั้งก็มีปัญหา บนพูด NetBSD มันทำงานได้ดีเพราะมันถูกสร้างขึ้นด้วยคุณสมบัติทั้งหมด มันเป็นเปลือกหอยชนิดหนึ่งในขณะที่bash
เป็นแพ็คเกจภายนอก แต่บนลีนุกซ์ash
นั้นมักจะถือว่าไม่ใช่แบบอินเทอร์แอคทีฟดังนั้นพวกเขาจึงรวบรวมมันโดยไม่มีประวัติและไม่มีการแก้ไขบรรทัด (สำคัญ) ตามทฤษฎีที่ว่ามันถูกใช้เพื่อรันgnu configure
สคริปต์ขนาดใหญ่เหล่านั้น
ประวัติความเป็นจริงของเชลล์
อัปเดต:มีประวัติที่ไม่ถูกต้องของเชลล์ที่ถูกคัดลอกจากสถานที่ต่อสถานที่บนเว็บและผู้คนต่างก็เชื่ออย่างนั้น ฉันจะพยายามให้รุ่นที่ถูกต้องและให้ลิงก์เชื่อมโยงเพื่อยืนยันที่นี่
<, >, >>, |, &
แต่มันมีgoto
ไวยากรณ์ควบคุมอย่างง่ายผ่านทางโปรแกรมภายนอกที่ค้นหาอินพุตมาตรฐาน ไม่มีเชลล์สคริปต์ที่ซับซ้อนแล้ว เชลล์หลังจากนั้นจะเปิดอินพุตคำสั่งบน fd แยกต่างหาก มันอาจดูง่ายในวันนี้ แต่ในหนังสยองขวัญที่ใช้คอมพิวเตอร์ในปี 1970 มันเป็นสิ่งที่ดีที่สุดในโลก เชื่อหรือไม่ว่ากระสุนโบราณนี้มีกระแสทวิตเตอร์ของตัวเองในวันนี้และแน่นอนเป็นหน้าแรกcsh
, เขียน (เช่นvi
) โดยบิลจอยที่ UCB นี่คือก่อน GNU readline และ NetBSD editline ดังนั้นจึงต้องมีเหตุผลอย่างสมบูรณ์ที่จะทำประวัติด้วย!
ไวยากรณ์ Csh เพิ่มคุณสมบัติเชลล์ส่วนใหญ่ในปัจจุบัน แต่มีไวยากรณ์ csh csh ไม่ได้เปลี่ยนไวยากรณ์ใด ๆฟรีหรืออย่างอื่น อันที่จริงมันเข้ากันได้กับเชลล์ ธ อมป์สันและเดิมรวมรหัสแหล่ง TSosh
และcsh
ยังคงได้รับความนิยมในบางเวลา . ไม่มีอินเทอร์เน็ตและได้รับใบอนุญาตจาก SW ดังนั้นในสภาพแวดล้อมที่เป็นไปได้ที่Stephen Bourneไม่ทราบเกี่ยวกับเชลล์ของ Joy และแน่นอนว่า Joy ไม่ทราบเกี่ยวกับ Bourne มันเป็นไปได้ว่าทั้งสองเปลือกหอยพบกันครั้งแรกเมื่อเลือดจากสายสะดือมี VAX และก่อนวางจำหน่ายในตอนนี้ลืม Unix ฉันจำได้ว่าบิลบ่นเกี่ยวกับการจัดสรรหน่วยความจำ โปรดทราบว่าทั้งสองเชลล์สามารถใช้งานร่วมกับ V6 ได้แบบย้อนหลังพวกเขาเพียงแค่ขยายไวยากรณ์ไปในทิศทางที่แตกต่างกัน ksh
เพิ่มบอร์นที่เข้ากันได้ ในที่สุดcsh
มีรหัสที่มากึ่งเผื่อ แต่มันก็ถูกผูกขึ้นในคดีระหว่าง AT & T และมหาวิทยาลัยแคลิฟอร์เนีย ถึงกระนั้นสิ่งเหล่านี้เป็นวันแห่งความรุ่งโรจน์ของ BSD Unix ในฐานะ บริษัท ที่มีความซับซ้อนซึ่งสามารถจ่ายค่าธรรมเนียม 50,000 ดอลลาร์จะซื้อใบอนุญาต AT&T แต่ติดตั้งดิสทริบิวชั่น 4.x BSD และมหาวิทยาลัยได้ฟรีcsh
ไวยากรณ์เช่นเดียวกับที่ไปกับเชลล์เชลล์ Bourne และบางคนก็รวมทั้งสองอย่างเข้าด้วยกัน คุณมีอย่างน้อยtcsh
, zsh
, และbash
ash
ไวยากรณ์ของ Bourne เป็น "ทางการ" ซึ่งเป็นส่วนหนึ่งของ AT&T ที่เผยแพร่ แต่ในสมัยนั้น BSD ค่อนข้างสำคัญและในตอนแรก BSD ได้แจกจ่าย Unix SW ในปริมาณที่พอสมควรแก่โลก/bin
และ/sbin
ขึ้นอยู่กับ/usr
ว่ามันถูกทำลายและจำเป็นต้องได้รับการแก้ไข; พวกเขาควรพึ่งพาไลบรารีใน/lib
เท่านั้น login
ต้องการเพียงPAM "newer API" ซึ่งต้องการ libs แบบไดนามิกจะเป็น NSS "Trend to" หรือไม่ NetBSD 2.0 เปลี่ยนไปเป็นแบบไดนามิกเต็มรูปแบบ/bin
และ/sbin
5 ปีที่ผ่านมา FreeBSD 5.2 ยิ่งนานกว่านี้และ Linux ... ดีที่แตกต่างกันตาม distro แต่นั่นก็เป็นเวลานานเกินไป
หากต้องการเพิ่มสิ่งที่ @DigitalRoss พูด
เพราะลีนุกซ์เป็นเพียงเคอร์เนล (และจำเป็นต้องมีการสนับสนุน) ในขณะที่ GNU ให้ (หรือไม่ได้ให้) ซอฟต์แวร์โคลนยูนิกซ์พื้นฐานทั้งหมดที่ทำให้สิ่งที่เราเรียกว่า "Linux" ใช้งานได้ Bash คือเชลล์ของโครงการ GNU ที่เขียนเป็นโคลนของเชลล์Bourneรุ่นเก่า(sh) จาก Unix เวอร์ชัน 7
จากการสำรวจของ unix.com พบว่ามันไม่ได้ไกลมากไปกว่า 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 ได้รับการยอมรับอย่างกว้างขวางเนื่องจากคุณสมบัติที่หลากหลาย นอกจากนี้ยังใช้คุณสมบัติจากเปลือกอื่น ๆ เช่น C-shell และ Korn-shell โปรดดูชุดคุณสมบัติเหล่านี้
เนื่องจาก 'bash' คือ 100% 'sh / ksh' ที่เข้ากันได้และ 'ksh' เป็นเชลล์ POSIX
ดังนั้นถ้าคุณต้องการระบบที่สอดคล้องกับ POSIX และคุณอยู่บน Linux คุณก็ใช้ bash
ถ้าคุณอยู่บนยูนิกซ์เชิงพาณิชย์โดยทั่วไปคุณจะได้รับ ksh เป็นเชลล์เริ่มต้น (บางครั้งก็แค่ sh เก่า) ด้วยเหตุผลบางอย่างซันยังคงค่าเริ่มต้นไปยัง csh c-shell ที่ไม่มั่นคง
ข้อดีคือความสะดวกในการพกพา a .sh ที่เขียนขึ้นสำหรับ hp-ux หรือ AIX มีโอกาสที่ดีในการทำงานเป็น linux 'bash' โดยไม่มีการเปลี่ยนแปลงใด ๆ
และเพื่อเพิ่มคำตอบอื่น ๆ ทั้งหมด: zsh
ไม่ได้หมายความว่าจะเข้ากันได้ย้อนหลัง คุณอาจตั้งค่าได้เพื่อให้สามารถใช้งานร่วมกันได้ แต่จากนั้นคุณก็สูญเสียคุณสมบัติของมัน
ฉันใช้zsh
เป็นเชลล์เชิงโต้ตอบปกติของฉัน แต่bash
/ dash
ดูเหมือนว่าฉันจะมีสติมากกว่าสำหรับภาษาสคริปต์เชลล์; พวกเขาใช้เวทย์มนตร์น้อยลงและสามารถคาดเดาได้มากขึ้น ... นี่เป็นสิ่งสำคัญสำหรับฉันเมื่อฉันเขียนสคริปต์ที่ใช้งานได้นานหลายปี
เพียงเพื่อสร้างความสับสนเรื่องที่sh
คำสั่งบางครั้งก็เป็นเพียงแค่การเชื่อมโยงสัญลักษณ์ในการเขียนโปรแกรมเปลือกอื่นเช่นash
, หรือbash
dash
Ubuntu เคยเชื่อมโยงกับมันbash
เนื่องจากbash
ได้รับการออกแบบให้รันสคริปต์เชลล์ Bourne ที่สอดคล้องกัน
เมื่อเร็ว ๆ นี้แม้ว่าอูบุนตูเปลี่ยนไปมีการเชื่อมโยงไปยังsh
ถูกออกแบบมาเพื่อเรียกใช้สคริปต์ (และยังสคริปต์) แต่มันถูกออกแบบมาเพื่อนำมาใช้เฉพาะสำหรับการเขียนสคริปต์เพื่อให้มันขาดคุณสมบัติการโต้ตอบของ นั่นทำให้มันเล็กลงและเร็วขึ้นdash
dash
bash
sh
bash