Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

กำเนิดของเปลือกทุบตี

เชลล์สคริปต์เป็นวินัยที่สำคัญสำหรับทุกคนในบทบาทของผู้ดูแลระบบ และเชลล์ที่โดดเด่นซึ่งผู้คนเขียนสคริปต์ในปัจจุบันคือ Bash Bash เป็นค่าเริ่มต้นในเกือบทุกรุ่นของ Linux และ MacOS เวอร์ชันใหม่ และคาดว่าจะเป็นส่วนหนึ่งของ Windows Terminal ในไม่ช้า เรียกได้ว่า Bash มีอยู่ทุกที่

แล้วมันมาถึงจุดนี้ได้อย่างไร? พอดคาสต์ Command Line Heroes ประจำสัปดาห์นี้เจาะลึกคำถามนั้นโดยถามคนที่เขียนโค้ดเอง

มันเริ่มต้นด้วย Unix

เช่นเดียวกับการเขียนโปรแกรมทั้งหมด เราต้องกลับไปที่ Unix ประวัติเชลล์เล็กน้อย:ในปี 1971 Ken Thompson ได้เปิดตัว Unix shell ตัวแรก นั่นคือ Thompson shell แต่มีข้อ จำกัด อย่างมากเกี่ยวกับจำนวนผู้ใช้สคริปต์ที่สามารถทำได้ และนั่นหมายถึงข้อจำกัดที่ร้ายแรงสำหรับการทำงานอัตโนมัติ และด้วยเหตุนี้ สำหรับการปฏิบัติงานด้านไอทีทั้งหมด

งานวิจัยที่ยอดเยี่ยมชิ้นนี้สรุปความท้าทายในการพยายามเขียนสคริปต์ในช่วงแรก (เพิ่มตัวหนาเพื่อเน้นคำสั่ง):

คล้ายกับรุ่นก่อนใน Multics เชลล์นี้ (/bin/sh ) เป็นโปรแกรมผู้ใช้อิสระที่ทำงานนอกเคอร์เนล แนวคิดเช่น globbing (การจับคู่รูปแบบสำหรับการขยายพารามิเตอร์ เช่น *.txt ) ถูกนำไปใช้ในยูทิลิตี้แยกต่างหากที่เรียกว่า glob เช่นเดียวกับ ถ้า คำสั่งเพื่อประเมินนิพจน์เงื่อนไข การแยกนี้ทำให้เปลือกมีขนาดเล็ก ต่ำกว่า 900 บรรทัดของแหล่งกำเนิด C

เชลล์แนะนำรูปแบบย่อสำหรับการเปลี่ยนเส้นทาง (<> และ >> ) และการวางท่อ (| หรือ ^ ) ที่รอดชีวิตมาสู่เปลือกหอยสมัยใหม่ คุณยังสามารถค้นหาการสนับสนุนสำหรับการเรียกใช้คำสั่งตามลำดับ (ด้วย ; ) และคำสั่งแบบอะซิงโครนัส (ด้วย & )

สิ่งที่เชลล์ทอมป์สันขาดคือความสามารถในการเขียนสคริปต์ จุดประสงค์เพียงอย่างเดียวคือใช้เป็นเชลล์แบบโต้ตอบ (ตัวแปลคำสั่ง) เพื่อเรียกใช้คำสั่งและดูผลลัพธ์

เมื่อการเข้าถึงเทอร์มินัลเพิ่มขึ้น ความสนใจในระบบอัตโนมัติก็เพิ่มขึ้นตามไปด้วย

Bourne shell เป็นอีกก้าวหนึ่ง

หกปีหลังจากการปล่อยตัว Thompson ในปี 1977 Stephen Bourne ได้ปล่อย Bourne shell ซึ่งมีวัตถุประสงค์เพื่อแก้ไขข้อจำกัดในการเขียนสคริปต์ของ Thompson shell (เชษฐ์ รามีย์ ผู้ดูแลหลักของภาษา Bash ตั้งแต่ปี 1990 กล่าวถึงเรื่องนี้ใน Command-Line Heroes ในตอนนี้) เป็นวิวัฒนาการตามธรรมชาติของเทคโนโลยีที่ออกมาจาก Bell Labs โดยเป็นส่วนหนึ่งของระบบ Unix

บอร์นตั้งใจจะทำอะไรที่แตกต่างออกไป? นักวิจัย M. Jones อธิบายไว้อย่างดี: 

Bourne shell มีเป้าหมายหลักสองประการ:ทำหน้าที่เป็นตัวแปลคำสั่งเพื่อรันคำสั่งแบบโต้ตอบสำหรับระบบปฏิบัติการและสำหรับการเขียนสคริปต์ (การเขียนสคริปต์ที่ใช้ซ้ำได้ซึ่งสามารถเรียกใช้ผ่านเชลล์ได้) นอกเหนือจากการแทนที่เชลล์ Thompson แล้ว กระสุน Bourne ยังเสนอข้อได้เปรียบหลายประการเหนือรุ่นก่อน Bourne ได้แนะนำโฟลว์การควบคุม ลูป และตัวแปรลงในสคริปต์ โดยให้ภาษาที่ใช้งานได้ดีกว่าในการโต้ตอบกับระบบปฏิบัติการ (ทั้งแบบโต้ตอบและไม่โต้ตอบ) เชลล์ยังอนุญาตให้คุณใช้เชลล์สคริปต์เป็นตัวกรอง โดยให้การสนับสนุนแบบบูรณาการสำหรับสัญญาณการจัดการ แต่ขาดความสามารถในการกำหนดฟังก์ชัน สุดท้ายนี้ รวมคุณลักษณะหลายอย่างที่เราใช้ในปัจจุบัน รวมถึงการแทนที่คำสั่ง (โดยใช้เครื่องหมายคำพูดย้อนกลับ) และเอกสาร HERE เพื่อฝังตัวอักษรสตริงที่เก็บรักษาไว้ภายในสคริปต์

บอร์นเคยให้สัมภาษณ์ไว้ว่า:

เปลือกดั้งเดิมไม่ใช่ภาษาจริงๆ มันคือการบันทึก—วิธีการดำเนินการลำดับเชิงเส้นของคำสั่งจากไฟล์ โฟลว์การควบคุมดั้งเดิมเพียงอย่างเดียวคือ GOTO เลเบล ข้อจำกัดเหล่านี้ต่อเชลล์ดั้งเดิมที่ Ken Thompson เขียนมีความสำคัญ ตัวอย่างเช่น คุณไม่สามารถใช้สคริปต์คำสั่งเป็นตัวกรองได้ง่ายๆ เนื่องจากไฟล์คำสั่งนั้นเป็นอินพุตมาตรฐาน และในตัวกรอง อินพุตมาตรฐานคือสิ่งที่คุณได้รับจากกระบวนการหลัก ไม่ใช่ไฟล์คำสั่ง

เชลล์ดั้งเดิมนั้นเรียบง่าย แต่เมื่อผู้คนเริ่มใช้ Unix สำหรับการพัฒนาแอปพลิเคชันและการเขียนสคริปต์ มันก็มีข้อจำกัดมากเกินไป ไม่มีตัวแปร ไม่มีโฟลว์ควบคุม และมีความสามารถในการอ้างอิงที่ไม่เพียงพอ

เชลล์ใหม่นี้เป็นก้าวที่ยิ่งใหญ่สำหรับสคริปต์ แต่ถ้าคุณมีสิทธิ์เข้าถึง

ทบทวนเปลือกของ Bourne เป็นซอฟต์แวร์ฟรี

ก่อนหน้านั้น เชลล์ที่โดดเด่นเป็นซอฟต์แวร์ที่เป็นกรรมสิทธิ์ซึ่งเป็นเจ้าของและดำเนินการที่ Bell Labs หากคุณโชคดี มหาวิทยาลัยของคุณอาจเข้าถึง Unix shell ได้ แต่การเข้าถึงที่จำกัดนั้นอยู่ไกลจากโลกที่ Free Software Foundation (FSF) ต้องการบรรลุ

Richard Stallman และกลุ่มนักพัฒนาที่มีใจเดียวกันกำลังเขียนคุณลักษณะทั้งหมดของ Unix พร้อมใบอนุญาตที่ให้บริการฟรีภายใต้ใบอนุญาต GNU หนึ่งในนักพัฒนาเหล่านั้นได้รับมอบหมายให้สร้างเชลล์ ผู้พัฒนาคนนั้นคือ Brian Fox และวิธีที่เขาพูดเกี่ยวกับงานของเขาทำให้ฉันประทับใจมาก ตามที่เขาพูดในพอดแคสต์:

เหตุผลที่ท้าทายมากคือเราต้องเลียนแบบพฤติกรรมทั้งหมดของกระสุนบอร์นอย่างเที่ยงตรง ในขณะเดียวกันก็ได้รับอนุญาตให้ขยายเพื่อให้เป็นเครื่องมือที่ดีกว่าสำหรับผู้ใช้

นี่เป็นช่วงเวลาที่ผู้คนกำลังคุยกันถึงความหมายของมาตรฐานของเชลล์ ด้วยประวัติศาสตร์นี้เป็นพื้นหลังและการแข่งขันในเบื้องหน้า เปลือกบอร์นยอดนิยมจึงถูกจินตนาการใหม่ บังเกิดใหม่

เปลือก บอร์น-อีกครั้ง

ตัวเร่งปฏิกิริยาทั้งสองนี้—ภารกิจซอฟต์แวร์เสรีและการแข่งขัน—ทำให้เชลล์ Bourne-Again (Bash) มีชีวิตขึ้นมา ในช่วงเวลาที่ผิดปกติ Fox ไม่ได้ตั้งชื่อเชลล์ตามชื่อตัวเอง และเขามุ่งเน้นไปที่วิวัฒนาการจาก Unix เป็นซอฟต์แวร์ฟรี (แม้ว่า Fox Shell สามารถเอาชนะ Fish shell ได้จนถึงคำสั่ง fsh #missedopportunity) ตัวเลือกการตั้งชื่อนั้นดูสอดคล้องกับบุคลิกของเขา อย่างที่ฟ็อกซ์พูดในตอนนี้ เขาไม่สนใจแม้แต่การรับรู้ถึงความรุ่งโรจน์ส่วนตัว เขาพยายามช่วยให้วัฒนธรรมการเขียนโปรแกรมพัฒนาขึ้น อย่างไรก็ตาม เขาไม่ได้อยู่เหนือการเล่นสำนวนที่ดี

เป็นเรื่องดีที่ได้ยินว่าบอร์นไม่รู้สึกน้อยใจกับการเล่นคำ บอร์นเล่าเรื่องเมื่อมีคนเดินมาหาเขาและมอบเสื้อยืด Bash ให้เขาในที่ประชุม บุคคลนั้นคือ Brian Fox

เชลล์ เผยแพร่แล้ว ผู้สร้าง
ทอมป์สัน เชลล์ 1971 เคน ทอมป์สัน
บอร์น เชลล์ 1977 สตีเฟน บอร์น
Bourne-Again Shell 1989 ไบรอัน ฟ็อกซ์

เมื่อเวลาผ่านไป Bash ก็เริ่มเป็นที่ยอมรับ วิศวกรคนอื่นๆ เริ่มใช้งานและเสนอการปรับปรุงการออกแบบ หลายปีต่อมา Fox ยืนยันว่าการเรียนรู้ที่จะเลิกควบคุม Bash เป็นหนึ่งในสิ่งที่สำคัญที่สุดที่เขาทำในชีวิตของเขา เนื่องจาก Unix ได้เปิดทางให้กับ Linux และการเคลื่อนไหวของซอฟต์แวร์โอเพ่นซอร์ส Bash จึงเป็นกำลังสำคัญในการเขียนสคริปต์ในโลกโอเพ่นซอร์ส โครงการดีๆ ดูเหมือนจะเติบโตเกินขอบเขตวิสัยทัศน์ของคนเพียงคนเดียว

เราเรียนรู้อะไรจากเปลือกหอยบ้าง

เชลล์เป็นเทคโนโลยีที่มีความสำคัญอย่างยิ่งต่อการใช้แล็ปท็อปทุกวันจนลืมไปได้ง่ายๆ ว่าจำเป็นต้องมีการประดิษฐ์คิดค้น เรื่องราวของการเปลี่ยนจาก Thompson ไปยัง Bourne ไปยัง Bash shells ทำให้เกิดประเด็นที่คุ้นเคย:

  • บุคคลที่มีแรงจูงใจสามารถก้าวไปข้างหน้าอย่างยิ่งใหญ่โดยคำนึงถึงภารกิจที่ถูกต้อง
  • สิ่งที่เราพึ่งพาในปัจจุบันส่วนใหญ่สร้างขึ้นจากผลงานของตำนานที่ยังมีชีวิตอยู่ในอุตสาหกรรมของเรา
  • ซอฟต์แวร์ที่มีแนวโน้มจะอยู่รอดคือซอฟต์แวร์ที่พัฒนาเกินกว่าวิสัยทัศน์ของผู้สร้างดั้งเดิม

Command Line Heroes ครอบคลุมภาษาการเขียนโปรแกรมสำหรับซีซัน 3 ทั้งหมดและใกล้จะถึงจุดสิ้นสุด อย่าลืมสมัครรับข้อมูลเพื่อเรียนรู้ทุกสิ่งที่คุณต้องการทราบเกี่ยวกับที่มาของภาษาการเขียนโปรแกรม และฉันชอบที่จะได้ยินเรื่องราวเชลล์ของคุณในความคิดเห็นด้านล่าง