Shell scripting là một kỷ luật cần thiết cho bất kỳ ai trong loại vai trò sysadmin và shell chủ yếu mà mọi người viết script ngày nay là Bash. Bash được mặc định trên gần như tất cả các bản phân phối Linux và các phiên bản MacOS hiện đại và dự kiến sẽ sớm trở thành một phần bản địa của Windows Terminal. Có thể nói, Bash có mặt ở khắp mọi nơi.
Vì vậy, làm thế nào nó đến được thời điểm này? Podcast Command Line Heroes của tuần này đi sâu vào câu hỏi đó bằng cách hỏi chính những người đã viết mã.
Nó bắt đầu với Unix
Giống như tất cả những thứ lập trình, chúng ta phải quay lại Unix. Một chút lịch sử về shell:Năm 1971, Ken Thompson phát hành Unix shell đầu tiên - Thompson shell. Nhưng có những hạn chế nghiêm trọng đối với số lượng tập lệnh mà người dùng có thể thực hiện. Và điều đó có nghĩa là những hạn chế nghiêm trọng đối với tự động hóa và do đó, đối với toàn bộ lĩnh vực hoạt động CNTT.
Phần nghiên cứu tuyệt vời này phác thảo những thách thức đối với những nỗ lực ban đầu trong việc viết kịch bản (được thêm đậm vào các lệnh tô sáng):
Tương tự như người tiền nhiệm của nó trong Multics, shell này ( / bin / sh ) là một chương trình người dùng độc lập được thực thi bên ngoài hạt nhân. Các khái niệm như đường tròn (so khớp mẫu để mở rộng tham số, chẳng hạn như * .txt ) đã được triển khai trong một tiện ích riêng có tên là global , cũng như nếu lệnh đánh giá biểu thức điều kiện. Sự tách biệt này giữ cho vỏ nhỏ, dưới 900 dòng của nguồn C.
Trình bao đã giới thiệu một cú pháp nhỏ gọn để chuyển hướng ( <> và >> ) và đường ống ( | hoặc ^ ) đã tồn tại trong lớp vỏ hiện đại. Bạn cũng có thể tìm thấy sự hỗ trợ để gọi các lệnh tuần tự (với ; ) và các lệnh không đồng bộ (với & ).
Điều mà vỏ Thompson thiếu là khả năng viết kịch bản. Mục đích duy nhất của nó là như một trình bao tương tác (trình thông dịch lệnh) để gọi các lệnh và xem kết quả.
Khi quyền truy cập vào các thiết bị đầu cuối ngày càng tăng, sự quan tâm đến tự động hóa cũng tăng theo.
Bourne shell là một bước tiến
Sáu năm sau khi Thompson phát hành, vào năm 1977, Stephen Bourne phát hành Bourne shell, nhằm giải quyết các hạn chế về kịch bản của Thompson shell. (Chet Ramey, người duy trì chính ngôn ngữ Bash từ năm 1990, thảo luận về nó trong tập Command-Line Heroes này). Đó là sự phát triển tự nhiên của công nghệ ra đời từ Bell Labs như một phần của hệ thống Unix.
Bourne định làm gì khác đi? Nhà nghiên cứu M. Jones đã phác thảo rõ điều đó:
Bourne shell có hai mục tiêu chính:đóng vai trò như một trình thông dịch lệnh để thực thi các lệnh một cách tương tác cho hệ điều hành và để viết kịch bản (viết các tập lệnh có thể tái sử dụng có thể được gọi thông qua shell). Ngoài việc thay thế vỏ Thompson, vỏ Bourne mang lại một số lợi thế so với những người tiền nhiệm của nó. Bourne đã đưa các luồng điều khiển, vòng lặp và các biến vào các tập lệnh, cung cấp một ngôn ngữ chức năng hơn để tương tác với hệ điều hành (cả tương tác và không tương tác). Shell cũng cho phép bạn sử dụng các tập lệnh shell làm bộ lọc, cung cấp hỗ trợ tích hợp để xử lý các tín hiệu, nhưng thiếu khả năng xác định các chức năng. Cuối cùng, nó kết hợp một số tính năng mà chúng ta sử dụng ngày nay, bao gồm thay thế lệnh (sử dụng dấu ngoặc kép) và tài liệu HERE để nhúng các ký tự chuỗi được bảo toàn trong một tập lệnh.
Bourne, trong một cuộc phỏng vấn trước đây, đã mô tả nó theo cách này:
Vỏ ban đầu không thực sự là một ngôn ngữ; đó là một bản ghi — một cách thực thi một chuỗi lệnh tuyến tính từ một tệp, nguyên thủy luồng điều khiển duy nhất là GOTO một nhãn. Những hạn chế này đối với lớp vỏ ban đầu mà Ken Thompson đã viết là rất đáng kể. Ví dụ:bạn không thể dễ dàng sử dụng tập lệnh lệnh làm bộ lọc vì bản thân tệp lệnh là đầu vào chuẩn. Và trong một bộ lọc, đầu vào chuẩn là những gì bạn kế thừa từ quy trình mẹ của mình, không phải tệp lệnh.
Vỏ ban đầu rất đơn giản nhưng khi mọi người bắt đầu sử dụng Unix để phát triển ứng dụng và viết kịch bản, nó quá hạn chế. Nó không có các biến, không có luồng điều khiển và nó có khả năng trích dẫn rất kém.
Trình bao mới này là một bước tiến lớn đối với những người viết kịch bản, nhưng chỉ khi bạn có quyền truy cập vào nó.
Xem xét lại shell của Bourne là phần mềm miễn phí
Cho đến lúc đó, phần mềm chiếm ưu thế là phần mềm độc quyền được sở hữu và vận hành tại Bell Labs. Nếu bạn đủ may mắn, trường đại học của bạn có thể có quyền truy cập vào Unix shell. Nhưng quyền truy cập bị hạn chế đó khác xa với thế giới mà Tổ chức Phần mềm Tự do (FSF) muốn đạt được.
Richard Stallman và một nhóm các nhà phát triển cùng chí hướng đã viết tất cả các tính năng của Unix với một giấy phép có sẵn miễn phí theo giấy phép GNU. Một trong những nhà phát triển đó được giao nhiệm vụ tạo ra một trình bao. Nhà phát triển đó là Brian Fox. Và cách anh ấy nói về nhiệm vụ của mình hoàn toàn khiến tôi thích thú. Như anh ấy nói trên podcast:
Lý do khiến nó quá thách thức là chúng tôi phải bắt chước một cách trung thực tất cả các hành vi của trình bao Bourne, đồng thời được phép mở rộng nó để biến nó thành một công cụ tốt hơn cho mọi người sử dụng.
Đây cũng là thời điểm mà mọi người đang thảo luận về ý nghĩa của việc trở thành một tiêu chuẩn shell. Với lịch sử này là nền tảng và sự cạnh tranh ở phía trước, lớp vỏ Bourne phổ biến đã được tưởng tượng lại; sinh lại.
Vỏ, Bourne-Again
Hai chất xúc tác này — sứ mệnh phần mềm miễn phí và sự cạnh tranh — đã đưa lớp vỏ Bourne-Again (Bash) vào cuộc sống. Trong một động thái bất thường vào thời điểm đó, Fox đã không đặt tên cho shell của mình, và anh ấy tập trung vào sự phát triển từ Unix thành phần mềm miễn phí. (Mặc dù Fox Shell có thể đã đánh bại Fish shell với lệnh fsh #missedopportunity). Lựa chọn đặt tên đó có vẻ phù hợp với tính cách của anh ấy. Như Fox đã nói trong tập phim, anh ta không quan tâm đến nhận thức về vinh quang cá nhân; anh ấy đang cố gắng giúp văn hóa lập trình phát triển. Tuy nhiên, anh ta không phải là một cách chơi chữ hay.
Thật vui khi biết rằng Bourne không hề cảm thấy khó chịu bởi lối chơi chữ. Bourne kể một câu chuyện về khi ai đó bước đến gần anh và đưa cho anh một chiếc áo phông Bash tại một hội nghị. Người đó là Brian Fox.
Shell | Đã phát hành | Người tạo |
---|---|---|
Thompson Shell | 1971 | Ken Thompson |
Bourne Shell | 1977 | Stephen Bourne |
Bourne-Again Shell | 1989 | Brian Fox |
Cùng với thời gian, Bash đã lớn lên trong việc nhận nuôi. Các kỹ sư khác bắt đầu sử dụng nó và gửi các cải tiến cho thiết kế của nó. Thật vậy, nhiều năm sau, Fox vẫn khẳng định rằng học cách từ bỏ quyền kiểm soát Bash là một trong những điều quan trọng nhất mà anh ấy đã làm trong cuộc đời mình. Khi Unix nhường chỗ cho Linux và phong trào phần mềm nguồn mở, Bash trở thành lực lượng viết kịch bản quan trọng trong thế giới nguồn mở. Những dự án tuyệt vời dường như phát triển vượt ra ngoài tầm nhìn của một người.
Chúng ta có thể học được gì từ shell?
Vỏ là một công nghệ không thể thiếu đối với việc sử dụng máy tính xách tay hàng ngày, đến nỗi thật dễ dàng quên mất nó là một phát minh cần thiết. Câu chuyện đi từ vỏ sò Thompson đến Bourne đến Bash rút ra một số điểm rút ra quen thuộc:
- Những cá nhân có động lực có thể đạt được những bước tiến dài với mục tiêu đúng đắn.
- Phần lớn những gì chúng ta dựa vào ngày nay được xây dựng dựa trên công trình của những huyền thoại vẫn còn sống trong ngành của chúng ta.
- Phần mềm có xu hướng tồn tại là những phần mềm phát triển ngoài tầm nhìn của người sáng tạo ban đầu.
Command Line Heroes đã bao gồm các ngôn ngữ lập trình cho tất cả Phần 3 và đang đến gần phần cuối của nó. Hãy nhớ đăng ký để tìm hiểu mọi thứ bạn muốn biết về nguồn gốc của các ngôn ngữ lập trình và tôi rất muốn nghe những câu chuyện về shell của bạn trong phần bình luận bên dưới.