cd
ngoài việc là một phần mềm dựng sẵn, thực sự cũng là một chương trình trên các HĐH tuân thủ POSIX. Họ phải cung cấp các tệp thực thi độc lập cho các tiện ích thông thường, như cd
. Đây là ví dụ trường hợp với Solaris , AIX , HP-UX và OS X .
Rõ ràng, một dựng sẵn cd
là vẫn bắt buộc như thực hiện bên ngoài của nó không thay đổi thư mục shell hiện hành. Tuy nhiên, sau này vẫn có thể hữu ích. Dưới đây là một ví dụ cho thấy POSIX hình dung cách cd
sử dụng lệnh này :
find . -type d -exec cd {} \;
Trên hệ thống POSIX, oneliner này sẽ báo cáo thông báo lỗi cho tất cả các thư mục bạn không được phép cd
vào. Trên hầu hết các bản phân phối Gnu / Linux, mặc dù vậy, nó không thành công với thông báo lỗi đó:
find: `cd': No such file or directory
Và đây là câu trả lời cho câu hỏi của bạn, " Tại sao cd không phải là một chương trình? " Bởi một trong những đồng tác giả Unix gốc. Trong một triển khai Unix rất sớm, cd
(đánh vần chdir
vào thời điểm đó) là một chương trình bên ngoài. Nó chỉ dừng hoạt động bất ngờ sau khi fork
được thực hiện lần đầu tiên.
Trích dẫn Dennis Ritchie :
Giữa sự hân hoan của chúng tôi, người ta phát hiện ra rằng lệnh chdir (thay đổi thư mục hiện tại) đã ngừng hoạt động. Có nhiều cách đọc mã và nội tâm lo lắng về việc bổ sung fork có thể phá vỡ cuộc gọi chdir như thế nào. Cuối cùng, sự thật đã sáng tỏ: trong hệ thống cũ, chdir là một mệnh lệnh thông thường; nó đã điều chỉnh thư mục hiện tại của quá trình (duy nhất) được gắn vào thiết bị đầu cuối. Trong hệ thống mới, lệnh chdir đã thay đổi chính xác thư mục hiện tại của quy trình được tạo để thực thi nó, nhưng quá trình này đã nhanh chóng chấm dứt và không có tác dụng gì đối với trình bao mẹ của nó! Nó là cần thiết để làm cho chdir trở thành một lệnh đặc biệt, được thực thi bên trong shell. Nó chỉ ra rằng một số chức năng giống như lệnh có cùng thuộc tính, ví dụ đăng nhập.
Nguồn: Dennis M. Ritchie, Hồi Sự phát triển của hệ thống chia sẻ thời gian Unix , Tạp chí kỹ thuật phòng thí nghiệm của AT & T Bell 63 (6), Phần 2, tháng 10 năm 1984, tr.1577
Trang hướng dẫn sử dụng chdir phiên bản Unix 1 (tháng 3 năm 1971) :
Vì một quy trình mới được tạo để thực thi mỗi lệnh, chdir sẽ không hiệu quả nếu nó được viết như một lệnh bình thường. Do đó, nó được công nhận và thực hiện bởi Shell.