ที่กล่าวว่า Korn shell - ซึ่งแตกต่างจาก POSIX shell - ไม่เคยเป็นที่นิยมนอกโลก Unix เชิงพาณิชย์ เพราะนี่คือการเพิ่มขึ้นของมันตรงกับช่วงปีแรกของการค้ายูนิกซ์จึงถูกจับได้ในสงครามยูนิกซ์ BSD Unixes หลีกเลี่ยงการใช้งาน C เชลล์และซอร์สโค้ดของมันก็ไม่สามารถใช้งานได้อย่างอิสระใน Linux เมื่อมันเริ่มต้นขึ้นดังนั้นเมื่อผู้จัดจำหน่าย Linux รุ่นแรกออกไปหาเชลล์คำสั่งเพื่อไปกับเคอร์เนล Linux พวกเขามักจะเลือกGNU Bashซึ่งเป็นหนึ่งใน - sh
องค์ประกอบที่คุณกำลังพูดถึง
ว่าสมาคมระหว่างต้น Linux และทุบตีปิดผนึกสวยมากชะตากรรมของเปลือกหอยอื่น ๆ อีกมากมายรวมทั้งksh
, และcsh
tcsh
ยังมีคนตายอีกจำนวนมากที่ยังใช้กระสุนเหล่านี้ในวันนี้
ฉันใช้ "shell script" ด้านบนเป็นคำทั่วไปหมายถึง Bourne / POSIX shell scripting นี่เป็นเพราะความแพร่หลายของกระสุนตระกูล Bourne หากต้องการพูดคุยเกี่ยวกับการเขียนสคริปต์บนเชลล์อื่นคุณต้องระบุ qualifier เช่น "C shell script" แม้ในระบบที่เชลล์ตระกูล C เป็นเชลล์แบบโต้ตอบเริ่มต้นจะเป็นการดีกว่าถ้าใช้เชลล์เป้าหมายสำหรับการเขียนสคริปต์
BSD Unix เวอร์ชันก่อนหน้าเป็นเพียงส่วนเสริมซอฟต์แวร์สำหรับ V6 Unix เนื่องจากเชลล์ Bourne ไม่ได้ถูกเพิ่มใน AT&T Unix จนกระทั่ง V7 BSD ไม่ได้เริ่มต้นจากการมีเชลล์เป้าหมายในทางเทคนิค คำตอบของ BSD ธรรมชาติดั้งเดิมของเปลือก ธ อมป์สันเป็นเปลือก C
แต่รุ่นแรกของแบบสแตนด์อโลน BSD (2.9BSD และ 3BSD) อยู่บนพื้นฐานของ V7 หรือทายาทแบบพกพาUNIX / 32Vเพื่อให้พวกเขาได้รวมถึงบอร์นเปลือก
(สาย 2BSD กลายเป็นส้อมขนาน BSD สำหรับดิจิตอลminicomputers PDPขณะที่ 3BSD และ 4BSD สายไปในการใช้ประโยชน์จากคอมพิวเตอร์ชนิดใหม่เช่นVaxenและยูนิกซ์เวิร์กสเตชัน 2.9BSD เป็นหลักรุ่น PDP ของ 4.1cBSD. พวกเขาอยู่ สมัยและรหัสที่ใช้ร่วมกัน . ปิดด้วยชั้นไม่ได้เพียงแค่หายไปเมื่อมาถึง VAX ดังนั้นบรรทัด 2BSD จะยังคง เผ่นแผล็ว พร้อม .)
มันปลอดภัยที่จะกล่าวว่า Bourne shell นั้นมีอยู่ทุกหนทุกแห่งในโลก Unix ในปี 1983 นั่นเป็นการประมาณที่ดีสำหรับ "ตลอดไป" ในอุตสาหกรรมคอมพิวเตอร์ MS-DOS มีระบบแฟ้มลำดับชั้นว่าปี (awww วิธี cuuute!) และเป็นครั้งแรก24 บิตแมคอินทอชกับ 9" B & W หน้าจอ - ไม่สีเทาตัวอักษรสีดำและสีขาว - จะไม่ออกมาจนถึงต้นปีหน้า
เปลือกของ Thompson นั้นค่อนข้างดั้งเดิมตามมาตรฐานของทุกวันนี้ มันเป็นเพียงเปลือกคำสั่งแบบโต้ตอบมากกว่าสภาพแวดล้อมการเขียนโปรแกรมสคริปต์ที่เราคาดหวังในวันนี้ มันมีสิ่งต่าง ๆ เช่นไปป์และการเปลี่ยนเส้นทาง I / O ซึ่งเราคิดว่าเป็นส่วนหนึ่งของ "Unix shell" ซึ่งทำให้เราคิดว่าMS-DOS เป็นคำสั่งที่ได้มาจาก Unix
The Bourne เปลือกยังแทนที่เปลือก PWBซึ่งเพิ่มสิ่งที่สำคัญที่ ธ อมป์สันเปลือกเช่นการเขียนโปรแกรม ( if
, switch
และwhile
) และรูปแบบของตัวแปรสภาพแวดล้อม เปลือก PWB จำได้ดีกว่าเปลือก Thompson เนื่องจากมันไม่ได้เป็นส่วนหนึ่งของ Unix ทุกรุ่น
เมื่อใครบางคนไม่เฉพาะเจาะจงเกี่ยวกับความเข้ากันได้ของ POSIX กับ Bourne shell มีหลายสิ่งที่พวกเขาอาจหมายถึง
ที่สุดขั้วหนึ่งพวกเขาสามารถใช้เชลล์บอร์น 2522 เป็นพื้นฐาน เป็น " sh
สคริปต์ใช้ได้กับระบบปฏิบัติการ" ในความรู้สึกนี้จะหมายถึงการคาดว่าจะทำงานอย่างสมบูรณ์ในบอร์นเชลล์จริงหรือใด ๆ ของผู้สืบทอดและโคลนนิ่ง: ash
, bash
, ksh
, zsh
ฯลฯ
บางคนที่สุดโต่งอื่น ๆ จะถือว่าเชลล์ที่ระบุโดย POSIX เป็นพื้นฐานแทน เราใช้คุณสมบัติ POSIX เชลล์หลายอย่างในฐานะ "มาตรฐาน" ทุกวันนี้ที่เรามักจะลืมไปว่ามันไม่ได้อยู่ในบอร์นเชลล์: ในตัวคณิตศาสตร์, การควบคุมงาน, ประวัติคำสั่ง, นามแฝง, การแก้ไขบรรทัดคำสั่ง, $()
รูปแบบของคำสั่ง การทดแทน ฯลฯ
แม้ว่า Korn shell นั้นมีรากฐานมาตั้งแต่ต้นทศวรรษ 1980 AT&T ไม่ได้ส่งในระบบปฏิบัติการ Unix จนกระทั่งSystem V Release 4ในปี 1988 เนื่องจาก Unixes เชิงพาณิชย์จำนวนมากใช้ SVR4 สิ่งนี้ทำให้ksh
Unix เชิงพาณิชย์ทุกตัวที่เกี่ยวข้องจาก ปลายยุค 80 เป็นต้นไป
(รสชาติ Unix แปลก ๆ ไม่กี่ตัวบนพื้นฐานของSVR3และก่อนหน้านี้ถูกนำไปวางไว้บนส่วนต่าง ๆ ของตลาดผ่านการเปิดตัว SVR4 แต่พวกเขาเป็นคนแรกที่ต่อต้านกำแพงเมื่อการปฏิวัติมาถึง)
ปี 1988 เป็นปีที่POSIX มาตรฐานแรกออกมาด้วย Korn เชลล์ที่ใช้ "POSIX shell" ต่อมาในปี 1993 รุ่น Korn shell ที่ปรับปรุงแล้วออกมา เนื่องจาก POSIX จับภาพต้นฉบับได้อย่างมีประสิทธิภาพโดยksh
แยกออกเป็นสองรุ่นใหญ่: ksh88
และksh93
ตั้งชื่อหลังจากหลายปีที่เกี่ยวข้องกับการแยก
ksh88
ไม่รองรับ POSIX ทั้งหมดแม้ว่าความแตกต่างจะมีขนาดเล็กดังนั้นksh88
เชลล์บางรุ่นจะได้รับการติดตั้งเพื่อให้เข้ากันได้กับ POSIX (จากการสัมภาษณ์ Slashdot ที่น่าสนใจกับดร. David G. Kornใช่คนที่เขียนเปลือก)
ksh93
เป็นซูเปอร์อย่างเต็มที่ที่เข้ากันได้ของเปลือก POSIX การพัฒนาksh93
ดำเนินไปเป็นระยะ ๆตั้งแต่แหล่งเก็บข้อมูลหลักย้ายจาก AT&T ไปยัง GitHubด้วยการเปิดตัวรุ่นใหม่ล่าสุดมีอายุประมาณ 3 ปีเมื่อฉันเขียนสิ่งนี้ ksh93v (ชื่อฐานของโครงการยังคงksh93
มีส่วนต่อท้ายที่เพิ่มเข้ามาเพื่อแสดงถึงรุ่นที่วางจำหน่ายหลังปี 1993)
ระบบที่รวม Korn เชลล์เป็นสิ่งที่แยกจาก POSIX เชลล์มักจะทำให้มันพร้อมใช้งาน/bin/ksh
แม้ว่าบางครั้งมันจะซ่อนอยู่ที่อื่น
เมื่อเราพูดถึงksh
หรือ Korn เชลล์ตามชื่อเรากำลังพูดถึงksh93
คุณสมบัติที่แยกความแตกต่างจากชุดย่อย Bourne และ POSIX เชลล์ที่เข้ากันได้แบบย้อนหลัง คุณไม่ค่อยวิ่งข้ามบริสุทธิ์ksh88
ในวันนี้
AT & T เก็บเปลือกกรรหัสที่มาเป็นกรรมสิทธิ์จนถึงมีนาคม 2000 จากจุดนี้การเชื่อมโยงของ Linux กับ GNU Bash นั้นแข็งแกร่งมาก ทุบตีและksh93
แต่ละคนมีข้อได้เปรียบกว่าคนอื่น ๆแต่ ณ จุดนี้ความเฉื่อยทำให้ Linux เชื่อมโยงอย่างแน่นหนากับ Bash
ว่าทำไมผู้ขายลินุกซ์ในช่วงต้นมากที่สุดเลือก GNU ทุบตีมากกว่าpdksh
ที่เป็นอยู่ในเวลาลินุกซ์ได้รับการเริ่มต้นผมคิดว่ามันเป็นเพราะมากของส่วนที่เหลือของ userland ยังมาจากโครงการ GNU Bash ค่อนข้างสูงกว่าpdksh
เนื่องจากผู้พัฒนา Bash ไม่ได้ จำกัด ตัวเองในการคัดลอก Korn เชลล์คุณสมบัติ
pdksh
หยุดการทำงานเมื่อเวลาที่ AT&T เผยแพร่ซอร์สโค้ดไปยัง Korn เชลล์จริง มีสองงาหลักที่ยังคงรักษาอย่างไรคือ: OpenBSD pdksh
และMirBSD Korn mksh
Shell,
ฉันพบว่ามันน่าสนใจที่mksh
เป็นการนำ Korn shell ไปใช้งานเท่านั้นที่ถูกบรรจุใน Cygwin
GNU Bash ก้าวล้ำกว่า POSIX ในหลาย ๆ ด้าน แต่คุณสามารถขอให้มันรันในโหมด POSIX ที่บริสุทธิ์กว่า
csh
/ tcsh
มักจะเป็นเปลือกโต้ตอบเริ่มต้นใน BSD Unixes จนถึงต้นปี 1990
เป็นตัวแปร BSDรุ่นแรกของ Mac OS X เป็นวิธีนี้ผ่าน Mac OS X 10.2 "จากัวร์" OS X เปลี่ยนเปลือกเริ่มต้นจากtcsh
การทุบตีในOS X 10.3 "เสือดำ" การเปลี่ยนแปลงนี้ไม่มีผลกับระบบที่อัพเกรดจาก 10.2 หรือก่อนหน้า ผู้ใช้ที่มีอยู่ในระบบที่แปลงเหล่านั้นเก็บtcsh
เชลล์ไว้
FreeBSD อ้างว่าจะยังคงใช้tcsh
เป็นเปลือกเริ่มต้นแต่ใน FreeBSD 10 VM ฉันมีที่นี่เปลือกเริ่มต้นดูเหมือนจะเป็นหนึ่งใน POSIX ได้Almquist สายพันธุ์เปลือก สิ่งนี้เป็นจริงใน NetBSD เช่นกัน
OpenBSD ใช้การแยกpdksh
เป็นเปลือกเริ่มต้นแทน
ความนิยมที่สูงขึ้นของ Linux และ Mac OS X ทำให้บางคนต้องการ FreeBSD ก็จะเปลี่ยนไปทุบตี แต่พวกเขาจะไม่สามารถทำเช่นนั้นเวลาเร็ว ๆ นี้สำหรับเหตุผลปรัชญา มันง่ายที่จะเปลี่ยนถ้ามันรบกวนจิตใจคุณ
มันหายากที่จะหาระบบที่มีเปลือกวานิลลาอย่างแท้จริงเหมือน/bin/sh
ทุกวันนี้ คุณต้องออกนอกเส้นทางของคุณเพื่อหาบางสิ่งที่อยู่ใกล้พอสำหรับการทดสอบความเข้ากันได้
ฉันรู้เพียงวิธีหนึ่งที่จะเรียกใช้ของแท้ 1979 บอร์นเชลล์วินเทจบนคอมพิวเตอร์ที่ทันสมัย: ใช้โบราณ Unix V7ภาพดิสก์กับSIMH PDP-11 จำลองจากโครงการคอมพิวเตอร์จำลองประวัติศาสตร์ SIMH ทำงานบนคอมพิวเตอร์ที่ทันสมัยทุกเครื่องไม่ใช่เพียงแค่คอมพิวเตอร์ที่ใช้ Unix SIMH แม้รันบน Androidและบน iOS
ด้วยOpenSolaris , ซันโอเพนซอร์สรุ่น SVR4 ของเปลือกบอร์นเป็นครั้งแรก ก่อนหน้านั้นรหัสแหล่งที่มาสำหรับ Bourne shell รุ่น post-V7 นั้นมีให้เฉพาะกับผู้ที่มีสิทธิ์ใช้งานซอร์สโค้ด Unix เท่านั้น
ขณะนี้โค้ดดังกล่าวสามารถใช้งานแยกต่างหากจากส่วนที่เหลือของโปรเจ็กต์ OpenSolaris ที่หมดอายุจากแหล่งต่าง ๆ สองแหล่ง
แหล่งที่มาตรงที่สุดคือโครงการเปลือก Heirloom บอร์น เรื่องนี้มีให้หลังจากเปิดตัว 2005 OpenSolaris การทำงานแบบพกพาและแก้ไขข้อผิดพลาดบางอย่างเสร็จสิ้นในอีกไม่กี่เดือนข้างหน้า แต่หลังจากนั้นการพัฒนาโครงการก็หยุดลง
Jörg Schilling ทำงานได้ดีขึ้นในการรักษาเวอร์ชันของรหัสนี้osh
ในแพ็คเกจSchily Toolsของเขา ดูด้านบนสำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้
โปรดทราบว่าเชลล์เหล่านี้ได้มาจากการปล่อยซอร์สโค้ดปี 2005 มีการสนับสนุนชุดอักขระหลายไบต์การควบคุมงานฟังก์ชั่นเชลล์และคุณสมบัติอื่น ๆ ที่ไม่มีอยู่ใน Bourne shell ปี 1979 ดั้งเดิม
วิธีการหนึ่งที่จะบอกว่าคุณอยู่ในต้นฉบับบอร์นเปลือกคือเพื่อดูว่าจะสนับสนุนคุณลักษณะที่ไม่มีเอกสารเพิ่มเพื่อความสะดวกในการเปลี่ยนแปลงจากเปลือก ธ อมป์สัน: เป็นชื่อแทนสำหรับ^
|
กล่าวคือคำสั่งเช่นls ^ more
จะให้ข้อผิดพลาดในเปลือกประเภท Korn หรือ POSIX แต่มันจะทำงานเหมือนls | more
บนเชลล์เป้าหมายที่แท้จริง
บางครั้งคุณพบfish
, scsh
หรือrc/es
พรรคพวก แต่พวกเขากำลังแม้ยากยิ่งกว่า C แฟนเปลือก
rc
ครอบครัวของเปลือกหอยไม่นิยมใช้ในระบบ Unix / Linux แต่ครอบครัวที่มีความสำคัญทางประวัติศาสตร์ซึ่งเป็นวิธีการที่จะได้รับสถานที่ในแผนภาพข้างต้น rc
เป็นเชลล์มาตรฐานของPlan 9 จากระบบปฏิบัติการBell Labsซึ่งเป็นรุ่นต่อจากรุ่นที่ 10 ของ Unixซึ่งสร้างขึ้นเพื่อเป็นส่วนหนึ่งของการวิจัยอย่างต่อเนื่องของ Bell Labs ในการออกแบบระบบปฏิบัติการ มันเข้ากันไม่ได้กับทั้ง Bourne และ C เชลล์ในระดับการตั้งโปรแกรม อาจมีบทเรียนอยู่ในนั้น
ตัวแปรที่ใช้งานมากที่สุดของrc
ดูเหมือนจะเป็นหนึ่งในการบำรุงรักษาโดย Toby Goodwinซึ่งเป็นไปตามrc
โคลนUnix โดย Byron Rakitzis
sh
) หรือไม่ สำหรับเชลล์ที่แตกต่างมันอ้างถึงว่าเชลล์นั้นสามารถรันสคริปต์เชลล์เป้าหมายได้หรือไม่