Điều đó nói rằng, vỏ Korn - như một thứ khác biệt với vỏ POSIX - chưa bao giờ thực sự trở nên phổ biến bên ngoài thế giới Unix thương mại. Điều này là do sự gia tăng của nó tương ứng với những năm đầu thương mại hóa Unix, vì vậy nó đã bị cuốn vào cuộc chiến Unix . BSD Unixes đã sử dụng nó để thay thế cho vỏ C và mã nguồn của nó không có sẵn để sử dụng trong Linux khi nó bắt đầu. Vì vậy, khi các nhà phân phối Linux đầu tiên tìm kiếm một vỏ lệnh để đi với nhân Linux của họ, họ thường chọn GNU Bash , một trong những người sh
bạn đang nói về.
Đó là sự kết hợp đầu tiên giữa Linux và Bash khá nhiều kín số phận của nhiều tiện ích khác, bao gồm ksh
, csh
và tcsh
. Ngày nay vẫn có những người khó tính vẫn sử dụng những chiếc vỏ đó, nhưng họ rất ít ở thiểu số .⁷
Tất cả lịch sử này giải thích lý do tại sao những người tạo ra các nhà khai thác tương đối thích bash
, zsh
và yash
chọn làm cho chúng sh
tương thích: Khả năng tương thích Bourne / POSIX là lớp vỏ tối thiểu cho các hệ thống giống Unix phải cung cấp để có được sự chấp nhận rộng rãi.
Tôi đã sử dụng "shell script" ở trên như một thuật ngữ chung có nghĩa là kịch bản shell Bourne / POSIX. Điều này là do sự phổ biến của vỏ gia đình Bourne. Để nói về kịch bản trên các trình bao khác, bạn cần đưa ra một vòng loại, như "tập lệnh trình bao C". Ngay cả trên các hệ thống có vỏ họ C là vỏ tương tác mặc định, tốt hơn là sử dụng vỏ Bourne để tạo kịch bản.
Có nhiều cách để kiểm tra xem tập lệnh shell Bourne đã cho có khả dụng hay không:
Các phiên bản ban đầu của BSD Unix chỉ là các bộ sưu tập phần mềm bổ sung cho Unix Unix. Vì shell Bourne không được thêm vào AT & T Unix cho đến V7, BSD về mặt kỹ thuật không bắt đầu có vỏ Bourne. Câu trả lời của BSD với bản chất nguyên thủy của vỏ Thompson là vỏ C .
Tuy nhiên, phiên bản độc lập đầu tiên của BSD (2.9BSD và 3BSD) được dựa trên V7 hoặc người thừa kế di động của UNIX / 32V , vì vậy họ đã bao gồm vỏ Bourne.
(Dòng 2BSD biến thành một ngã ba song song của BSD cho kỹ thuật số của máy tính mini PDP , trong khi 3BSD và 4BSD dòng tiếp tục tận dụng lợi thế của các loại máy tính mới hơn như Vaxen và Unix máy trạm 2.9BSD về cơ bản là phiên bản PDP của 4.1cBSD;. Họ đương thời, và mã chia sẻ . PDPs không chỉ biến mất khi VAX đến, do đó, dòng 2BSD được vẫn shambling cùng .)
Có thể nói rằng vỏ Bourne có mặt ở khắp mọi nơi trong thế giới Unix vào năm 1983. Đó là một sự gần đúng tốt cho "mãi mãi" trong ngành công nghiệp điện toán. MS-DOS đã có một hệ thống tập tin phân cấp vào năm đó (awww, cách thức hoạt động!) Và Macintosh 24 bit đầu tiên với màn hình 9 "B & W - không phải thang độ xám, nghĩa đen và trắng - sẽ không xuất hiện cho đến đầu năm sau.
Vỏ của Thompson khá nguyên thủy theo tiêu chuẩn ngày nay. Nó chỉ là một vỏ lệnh tương tác, chứ không phải là môi trường lập trình tập lệnh mà chúng ta mong đợi ngày hôm nay. Nó đã có những thứ như ống dẫn và chuyển hướng I / O, mà chúng ta nghĩ là một phần nguyên mẫu của "vỏ Unix", do đó chúng ta nghĩ về vỏ lệnh MS-DOS khi lấy chúng từ Unix.
The Bourne shell cũng thay vỏ PWB , mà thêm vào những điều quan trọng để vỏ Thompson như lập trình ( if
, switch
và while
) và một hình thức đầu của các biến môi trường. Shell PWB thậm chí còn ít được nhớ đến hơn so với shell Thompson vì nó không phải là một phần của mọi phiên bản Unix.
Khi ai đó không cụ thể về khả năng tương thích vỏ POSIX và Bourne, có rất nhiều điều họ có thể muốn nói.
Ở một thái cực, họ có thể sử dụng vỏ Bourne 1979 làm đường cơ sở. Một " sh
kịch bản -tương thích" theo nghĩa này có nghĩa là nó được dự kiến để chạy hoàn hảo trên vỏ Bourne đúng hay bất kỳ kế thừa và nhân bản của nó: ash
, bash
, ksh
, zsh
,, vv
Một người ở thái cực khác giả định vỏ được chỉ định bởi POSIX làm đường cơ sở thay thế. Ngày nay, chúng ta lấy quá nhiều tính năng của vỏ POSIX là "tiêu chuẩn" đến nỗi chúng ta thường quên rằng chúng không thực sự có trong vỏ Bourne: số học tích hợp, kiểm soát công việc, lịch sử lệnh, bí danh, chỉnh sửa dòng lệnh, $()
hình thức lệnh thay thế, vv
Mặc dù trình bao Korn bắt nguồn từ đầu những năm 1980, AT & T đã không phát hành nó trong Unix cho đến khi System V Release 4 vào năm 1988. Vì rất nhiều Unix thương mại dựa trên SVR4, điều này đã đưa ksh
vào khá nhiều Unix thương mại có liên quan từ cuối những năm 1980 trở đi.
(Một vài hương vị Unix kỳ lạ dựa trên SVR3 và trước đó đã nắm giữ các phần của thị trường trước khi phát hành SVR4, nhưng chúng là sản phẩm đầu tiên chống lại bức tường khi cuộc cách mạng đến.)
Năm 1988 cũng là năm tiêu chuẩn POSIX đầu tiên xuất hiện, với lớp vỏ Korn dựa trên "vỏ POSIX". Sau đó, vào năm 1993, một phiên bản cải tiến của vỏ Korn đã xuất hiện. Vì POSIX đã đóng đinh một cách hiệu quả bản gốc tại chỗ, được ksh
chia thành hai phiên bản chính: ksh88
và ksh93
, được đặt tên theo những năm liên quan đến việc chia tách của chúng.
ksh88
không hoàn toàn tương thích với POSIX, mặc dù sự khác biệt là nhỏ, do đó một số phiên bản của ksh88
vỏ đã được vá để tương thích với POSIX. (Điều này từ một cuộc phỏng vấn thú vị trên Slashdot với Tiến sĩ David G. Korn . Vâng, anh chàng đã viết vỏ.)
ksh93
là một superset tương thích hoàn toàn của vỏ POSIX . Phát triển trên ksh93
đã không thường xuyên kể từ khi kho lưu trữ nguồn chính chuyển từ AT & T sang GitHub với bản phát hành mới nhất khoảng 3 năm khi tôi viết bài này, ksh93v. (Tên cơ sở của dự án vẫn còn ksh93
các hậu tố được thêm vào để biểu thị các phiên bản phát hành sau năm 1993.)
Các hệ thống bao gồm vỏ Korn như một thứ riêng biệt với vỏ POSIX thường làm cho nó có sẵn /bin/ksh
, mặc dù đôi khi nó được ẩn ở nơi khác.
Khi chúng ta nói về ksh
hoặc vỏ Korn theo tên, chúng ta đang nói về ksh93
các tính năng phân biệt nó với các tập hợp vỏ Bourne và POSIX tương thích ngược của nó. Bạn hiếm khi chạy qua sự tinh khiết ksh88
ngày hôm nay.
AT & T giữ độc quyền mã nguồn vỏ Korn cho đến tháng 3 năm 2000 . Vào thời điểm đó, sự liên kết của Linux với GNU Bash rất mạnh mẽ. Bash và ksh93
mỗi người đều có lợi thế hơn nhau , nhưng tại thời điểm này, quán tính giữ cho Linux liên kết chặt chẽ với Bash.
Là tại sao các nhà cung cấp Linux đầu phổ biến nhất là chọn GNU Bash qua pdksh
, mà là có sẵn tại thời Linux đã bắt đầu, tôi đoán đó là vì quá nhiều phần còn lại của Userland cũng đến từ dự án GNU . Bash cũng có phần tiến bộ hơn pdksh
, vì các nhà phát triển Bash không giới hạn bản thân trong việc sao chép các tính năng của Korn shell.
Công việc pdksh
đã dừng lại về thời gian AT & T phát hành mã nguồn cho trình bao Korn thực sự. Tuy nhiên, có hai nhánh chính vẫn được duy trì: OpenBSD pdksh
và MirBSD Korn Shell ,mksh
.
Tôi thấy thú vị khi đó mksh
là triển khai vỏ Korn duy nhất hiện được đóng gói cho Cygwin.
GNU Bash vượt xa POSIX theo nhiều cách, nhưng bạn có thể yêu cầu nó chạy ở chế độ POSIX thuần túy hơn .
csh
/ tcsh
thường là lớp vỏ tương tác mặc định trên BSD Unixes cho đến đầu những năm 1990.
Là một biến thể BSD , các phiên bản đầu tiên của Mac OS X là như vậy, thông qua Mac OS X 10.2 "Jaguar" . OS X đã chuyển lớp vỏ mặc định từ tcsh
Bash sang OS X 10.3 "Panther" . Thay đổi này không ảnh hưởng đến các hệ thống được nâng cấp từ 10.2 trở về trước. Người dùng hiện có trên các hệ thống được chuyển đổi giữ tcsh
vỏ của họ .
FreeBSD tuyên bố vẫn sử dụng tcsh
làm vỏ mặc định , nhưng trên FreeBSD 10 VM tôi có ở đây, vỏ mặc định dường như là một trong các biến thể vỏ Almquist tương thích POSIX . Điều này cũng đúng trên NetBSD.
pdksh
Thay vào đó, OpenBSD sử dụng một ngã ba làm vỏ mặc định.
Mức độ phổ biến cao hơn của Linux và OS X khiến một số người mong muốn FreeBSD cũng sẽ chuyển sang Bash, nhưng họ sẽ không làm điều đó sớm bất cứ lúc nào vì lý do triết học . Thật dễ dàng để chuyển đổi nó , nếu điều này làm phiền bạn.
Rất hiếm khi tìm thấy một hệ thống có vỏ Bourne thực sự như /bin/sh
ngày nay. Bạn phải đi ra ngoài để tìm thứ gì đó đủ gần với nó để kiểm tra khả năng tương thích.
Tôi chỉ biết một cách duy nhất để chạy vỏ Bourne cổ điển chính hãng năm 1979 trên máy tính hiện đại: sử dụng hình ảnh đĩa Unix V7 cổ đại với trình giả lập SIMH PDP-11 từ Dự án mô phỏng lịch sử máy tính . SIMH chạy trên hầu hết mọi máy tính hiện đại , không chỉ các máy tính giống Unix. SIMH thậm chí chạy trên Android và trên iOS .
Với OpenSolaris , Sun lần đầu tiên mở phiên bản SVR4 của vỏ Bourne. Trước đó, mã nguồn cho các phiên bản hậu V7 của vỏ Bourne chỉ có sẵn cho những người có giấy phép mã nguồn Unix.
Mã đó hiện có sẵn tách biệt với phần còn lại của dự án OpenSolaris không còn tồn tại từ một số nguồn khác nhau.
Nguồn trực tiếp nhất là dự án vỏ Heirloom Bourne . Điều này đã trở nên khả dụng ngay sau khi phiên bản OpenSolaris ban đầu năm 2005. Một số công việc về tính di động và sửa lỗi đã được thực hiện trong vài tháng tới, nhưng sau đó việc phát triển dự án bị dừng lại.
Jörg Schilling đã thực hiện tốt hơn việc duy trì một phiên bản của mã này như osh
trong gói Schily Tools của mình . Xem ở trên để biết thêm về điều này.
Hãy nhớ rằng các shell này có nguồn gốc từ bản phát hành mã nguồn năm 2005 có chứa hỗ trợ bộ ký tự nhiều byte , điều khiển công việc, các hàm shell và các tính năng khác không có trong shell Bourne 1979 gốc.
Một cách để biết bạn có đang sử dụng trình bao Bourne ban đầu hay không là xem liệu nó có hỗ trợ một tính năng không có giấy tờ được thêm vào để dễ dàng chuyển đổi từ trình bao của Thompson hay không: ^
như một bí danh |
. Điều đó có nghĩa là, một lệnh như ls ^ more
sẽ đưa ra lỗi trên lớp vỏ Korn hoặc POSIX, nhưng nó sẽ hoạt động giống như ls | more
trên vỏ Bourne thực sự.
Đôi khi bạn gặp phải một fish
, scsh
hoặc rc/es
bám chặt, nhưng chúng còn khan hiếm hơn fan vỏ C.
Họ rc
shell không được sử dụng phổ biến trên các hệ thống Unix / Linux, nhưng họ là quan trọng trong lịch sử, đó là cách nó giành được một vị trí trong sơ đồ trên. rc
là lớp vỏ tiêu chuẩn của Kế hoạch 9 từ hệ điều hành Bell Labs , một loại kế thừa cho phiên bản thứ 10 Unix , được tạo ra như một phần của nghiên cứu tiếp tục của Bell Labs về thiết kế hệ điều hành. Nó không tương thích với cả Bourne và C shell ở cấp độ lập trình; Có lẽ có một bài học trong đó.
Biến thể hoạt động mạnh nhất rc
dường như là biến thể được duy trì bởi Toby Goodwin , dựa trên rc
bản sao Unix của Byron Rakitzis.
sh
) hay không. Đối với một shell khác, nó đề cập đến việc shell đó có thể chạy các kịch bản shell Bourne hay không.