Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

Bash กลายเป็น Default Shell ของ Sysadmin ยังไง?

Shell Scripting เป็น Discipline สำคัญสำหรับทุกคนใน Role Sysadmin และ Shell หลักที่เขียน Scripts วันนี้คือ Bash Bash มา Default บนเกือบทุก Linux Distributions และ macOS Versions โมเดิร์น และจะเป็น Native Part ของ Windows Terminal เร็วๆ นี้ Bash ไพว่ทุกที่

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

เริ่มจาก Unix

เหมือน Programming Things ทั้งหมด ต้องกลับไป Unix ประวัติ Shell เล็กน้อย: ปี 1971 Ken Thompson Released First Unix Shell — Thompson Shell แต่มี Limitations รุนแรงต่อ Scripting ผู้ใช้ทำได้ นั่นหมายถึง Limitations สำหรับ Automation และผลสะท้อนไปทั่ว IT Operations

Research ชิ้นนี้ Outline Challenges ของ Early Scripting Attempts (Bold เน้นคำสั่ง):

คล้าย Predecessor ใน Multics Shell นี้ (/bin/sh) เป็น User Program อิสระ Execute นอก Kernel Concepts เช่น Globbing (Pattern Matching สำหรับ Parameter Expansion เช่น *.txt) Implemented ใน Utility แยกชื่อ glob เหมือนกัน if Command Evaluate Conditional Expressions Separation นี้ทำให้ Shell เล็ก Under 900 Lines C Source

Shell Introduced Compact Syntax สำหรับ Redirection (< > และ >>) และ Piping (| หรือ ^) ที่รอดชีวิตมาจน Shell สมัยใหม่ ยังมี Support Invoking Sequential Commands (ด้วย ;) และ Asynchronous Commands (ด้วย &)

สิ่งที่ Thompson Shell ขาด คือ Ability to Script 目的เพียงอย่างเดียวคือ Interactive Shell (Command Interpreter) Invoke Commands และ View Results

เมื่อ Access ถึง Terminals มากขึ้น ความสนใจใน Automation ก็เติบโตไปด้วย

Bourne Shell ก้าวหน้าต่อไป

6 ปีหลัง Thompson Release ปี 1977 Stephen Bourne Released Bourne Shell เพื่อแก้ Scripting Limitations ของ Thompson Shell (Chet Ramey Maintainer หลักของ Bash ตั้งแต่ 1990 พูดถึงใน Episode นี้ของ Command-Line Heroes) เป็น Natural Evolution ของ Technology จาก Bell Labs ส่วนของ Unix System

Bourne ตั้งใจทำต่างไปยังไง? Researcher M. Jones Outline ดี:

Bourne Shell มี 2 Primary Goals: เป็น Command Interpreter Interactive Execute Commands สำหรับ OS และ Scripting (เขียน Reusable Scripts Invoke ผ่าน Shell) นอกจาก Replace Thompson Shell Bourne Shell ให้ Advantages หลายอย่าง: Introduced Control Flows, Loops, Variables เข้า Scripts ให้ Functional Language มากขึ้น Interact กับ OS (Interactive และ Non-interactive) Shell ยัง Permit ใช้ Shell Scripts as Filters Integrated Support Handling Signals แต่ขาด Ability Define Functions สุดท้าย Incorporate Features ใช้จนถึง اليوم เช่น Command Substitution (Back Quotes) HERE Documents Embed Preserved String Literals ใน Script

Bourne ใน Interview ก่อนหน้าอธิบายว่า:

Original Shell ไม่ใช่ Language จริงๆ มันคือ Recording — วิธี Execute Linear Sequence ของ Commands จาก File Control Flow Primitive เดียวคือ GOTO Label Limitations นี้ของ Original Shell ที่ Ken Thompson เขียน Significant ไม่สามารถใช้ Command Script as Filter ได้ง่าย เพราะ Command File เองคือ Standard Input ใน Filter Standard Input คือสิ่งที่ Inherit จาก Parent Process ไม่ใช่ Command File

Original Shell เรียบง่าย แต่เมื่อคนใช้ Unix สำหรับ Application Development และ Scripting มัน Limited เกินไป ไม่มี Variables ไม่มี Control Flow Quoting Capabilities ไม่พอ

Shell ใหม่นี้เป็นก้าวใหญ่สำหรับ Scripters แต่ก็ต่อเมื่อคุณมี Access เข้าไป

คิดใหม่ Bourne's Shell เป็น Free Software

จนกว่าจะถึงจุดนี้ Dominant Shells เป็น Proprietary Software Owned และ Operated ที่ Bell Labs หากโชคดี University อาจมี Access Unix Shell แต่วิธีการ Restricted Access ไกลจาก World ที่ Free Software Foundation (FSF) อยากบรรลุ

Richard Stallman และกลุ่ม Developers เขียน Features ของ Unix ทั้งหมดด้วย License ฟรี تحت GNU License Developer หนึ่งได้รับมอบหมายทำ Shell Developer นั้นคือ Brian Fox และวิธีที่เขาพูดเกี่ยวกับ Task นี้น่าทึ่งมาก ตามที่พูดใน Podcast:

เหตุผลที่ท้าทายมากคือ ต้อง Faithfully Mimic Behaviors ทั้งหมดของ Bourne Shell ขณะเดียวกัน Allowed Extend มันให้เป็น Tool ดีกว่าสำหรับผู้คนใช้

นี่ยังเป็นยุคที่คนพูดถึงว่า Shell Standard หมายถึงอะไร ด้วย History นี้เป็น Background และ Competition ใน Foreground Popular Bourne Shell ถูก Reimagine; Born Again

Shell, Bourne-Again

2 Catalysts นี้ — Free Software Mission และ Competition — นำ Bourne-Again Shell (Bash) มาสู่ชีวิต ใน Move ที่ Unusual ตอนนั้น Fox ไม่ได้ตั้งชื่อ Shell ตามตัวเอง และ Focus ที่ Evolution จาก Unix สู่ Free Software (แม้ Fox Shell อาจชนะ Fish Shell ไปที่ Command fsh #missedopportunity) Naming Choice ดู Aligned กับ Personality ตาม Fox ใน Episode เขาไม่สนใจ Perception ของ Personal Glory เขาพยายามช่วยให้ Culture ของ Programming Evolve เขาไม่ได้ Above Good Pun

ดีที่ Bourne ไม่รู้สึก Slighted โดย Pun บนคำ Bourne เล่าว่า ตอนมีคนเดินมามอบ Bash T-shirt ที่ Conference คนนั้นคือ Brian Fox

Shell Released Creator
Thompson Shell 1971 Ken Thompson
Bourne Shell 1977 Stephen Bourne
Bourne-Again Shell 1989 Brian Fox

ตามเวลา Bash โตใน Adoption Engineers อื่นใช้และ Submit Improvements ไป Design หลายปีต่อมา Fox ย้ำว่า Learn ให้ Up Control ของ Bash เป็นหนึ่งในสิ่งสำคัญที่สุดที่เขาทำในชีวิต เมื่อ Unix ให้ทาง Linux และ Open Source Software Movement Bash กลายเป็น Key Scripting Force ใน Open Source World Great Projects โตเกิน Vision ของ Single Person

เราเรียนรู้จาก Shells ได้อะไร?

Shell เป็น Technology ที่ Integral กับการใช้ Laptop ทุกวัน จนลืมง่ายว่ามันต้อง Invented เรื่องราวจาก Thompson ไป Bourne ไป Bash Shells ดึง Takeaways ที่คุ้นเคย:

  • Motivated Individuals ทำ Strides ใหญ่ได้ด้วย Right Mission
  • สิ่งที่พึ่งพาวันนี้ สร้างบนงานของ Legends ที่ยังมีชีวิตอยู่ใน Industry
  • Software ที่รอดชีวิต มักเป็นตัวที่ Evolve เกิน Vision ของ Original Creators

Command Line Heroes Cover Programming Languages ทั้ง Season 3 และใกล้จบ Season ติดตาม Subscribe เรียนรู้ Origin ของ Programming Languages ทั้งหมด และอยากได้ Shell Stories ของคุณใน Comments