Có hai lớp dựng sẵn:
Một số lệnh phải được tích hợp vào chính chương trình shell vì chúng không thể hoạt động nếu chúng ở bên ngoài.
cd
là một thứ như vậy vì nếu nó ở bên ngoài, nó chỉ có thể thay đổi thư mục của chính nó; nó không thể ảnh hưởng đến thư mục làm việc hiện tại của shell. (Xem thêm: Tại sao cd
không phải là một chương trình? )
Các lớp lệnh khác được xây dựng vào vỏ hoàn toàn cho hiệu quả.
Các trang người đàn ông có một phần trên builtins đó đề cập đến , và như ví dụ về các lệnh trong lớp này.dash
printf
echo
test
Các hệ thống Unix luôn bao gồm các tệp thực thi riêng cho các lệnh trong lớp thứ hai đó. Các tệp thực thi riêng biệt này vẫn có sẵn trên mọi hệ thống Unix mà tôi đã sử dụng, mặc dù chúng cũng được tích hợp vào mọi vỏ bạn có thể sử dụng. ( POSIX thực sự yêu cầu những thực thi này phải có mặt.)
Tôi tin rằng echo
đã được tích hợp vào hệ vỏ trong AT & T Unix System V Release 3.1. Tôi dựa trên sự so sánh của hai phiên bản hướng dẫn sử dụng khác nhau cho các hệ thống Unix dòng AT & Ts 3B1 . Ai đó đã quét các phiên bản 1986 của các hướng dẫn này và đưa chúng lên mạng ; những cái này tương ứng với bản phát hành gốc của SVR3. Bạn có thể thấy điều đó echo
không có trong danh sách ở trang 523 của Hướng dẫn sử dụng UNIX System V, Tập II , nơi bạn mong đợi nếu lệnh được tích hợp vào trình bao. Trong bản sao giấy địa phương của tôi về hướng dẫn sử dụng SVR3.1 từ năm 1987, echo
được liệt kê trong phần này của hướng dẫn.
Tôi khá chắc chắn rằng đây không phải là một sáng tạo CSRG của Berkeley mà AT & T đã mang về nước. 4.3BSD ra đời cùng năm với SVR3, 1986, nhưng nếu bạn xem trang chủ sh.1 của 4.3BSD , bạn sẽ thấy rằng echo
nó không nằm trong danh sách các lệnh tích hợp của phần "Lệnh đặc biệt". Nếu CSRG làm điều này, điều đó khiến chúng tôi muốn có một nguồn tài liệu để chứng minh điều đó.
Tại thời điểm này, bạn có thể tự hỏi liệu có echo
được tích hợp vào vỏ sớm hơn SVR3.1 hay không và thực tế điều này chỉ đơn giản là không được ghi nhận cho đến lúc đó. Mã nguồn Unix-SVR3 AT & T mới nhất có sẵn cho tôi là trong tarball PDP-11 System III , trong đó bạn sẽ tìm thấy mã nguồn vỏ Bourne. Bạn sẽ không tìm thấy echo
trong bảng lệnh dựng sẵn /usr/src/cmd/sh/msg.c
. Dựa trên dấu thời gian trong tệp đó, điều đó chứng tỏ rằng echo
chắc chắn không có trong vỏ năm 1980.
Câu đố
Cùng một thư mục cũng chứa một tệp được gọi là builtin.c
không chứa bất cứ điều gì về câu hỏi này, nhưng chúng tôi thấy nhận xét thú vị này:
/*
builtin commands are those that Bourne did not intend
to be part of his shell.
Redirection of i/o, or rather the lack of it, is still a
problem..
*/