[T] hành vi của anh ta có vẻ phù hợp giữa tất cả các vỏ khiếu nại POSIX. Tôi không thấy sự cần thiết của phòng ngọ nguậy ở đây.
Bạn không nhìn đủ sâu.
Trở lại những năm 1980, cơ chế này không được chuẩn hóa trên thực tế. Mặc dù Dennis Ritchie đã thực hiện nó, nhưng việc thực hiện đó đã không đến được với công chúng ở phía AT & T của vũ trụ. Nó thực sự chỉ có sẵn công khai và được biết đến trong BSD; với các tập lệnh shell thực thi không có sẵn trên AT & T Unix. Do đó, không hợp lý để chuẩn hóa nó. Tình trạng của vấn đề được minh họa bởi tài liệu đương đại này, một trong nhiều vấn đề như sau:
Lưu ý rằng BSD cho phép các tệp bắt đầu #! interpreter
được thực thi trực tiếp, trong khi SysV chỉ cho phép các tệp a.out được thực thi trực tiếp. Điều này có nghĩa là một thể hiện của một trong các exec…()
thói quen trong chương trình BSD có thể phải được thay đổi theo SysV để thực thi trình thông dịch (theo cách thức /bin/sh
) cho chương trình đó.
- Stephen Frede (1988). "Lập trình trên Hệ thống X Phát hành Y". Bản tin nhóm người dùng hệ thống Unix của Úc . Tập 9. Số 4. p. 111.
Một điểm quan trọng ở đây là bạn đang xem shell, trong khi sự tồn tại của các kịch bản shell thực thi thực sự là một vấn đề cho các exec…()
hàm. Các shell nào bao gồm các tiền thân của cơ chế tập lệnh thực thi, vẫn được tìm thấy trong một số shell ngay cả ngày nay (và hiện tại cũng được ủy quyền cho exec…p()
tập hợp con của các hàm), và có phần sai lệch. Những gì tiêu chuẩn cần giải quyết trong vấn đề này là làm thế nào exec…()
trên một kịch bản diễn giải hoạt động, và tại thời điểm POSIX ban đầu được tạo ra, nó chỉ đơn giản là không hoạt động ở vị trí đầu tiên trong một phần chính của phổ hệ điều hành đích .
Một câu hỏi phụ là tại sao điều này chưa được tiêu chuẩn hóa, đặc biệt là khi cơ chế số ma thuật cho các phiên dịch viên kịch bản đã đến với công chúng ở phía AT & T của vũ trụ và đã được ghi nhận exec…()
trong Định nghĩa giao diện hệ thống 5 , vào đầu những năm 1990 :
Một tệp thông dịch bắt đầu bằng một dòng của mẫu#! tên đường dẫn [arg]
trong đó pathname là đường dẫn của trình thông dịch và arg là một đối số tùy chọn. Khi bạn exec
một tệp thông dịch, hệ thống exec
sẽ là trình thông dịch được chỉ định.
- exec
. System V Interface Definition . Tập 1. 1991.
Thật không may, hành vi này vẫn còn gần như khác biệt như trong những năm 1980 và không có hành vi thực sự phổ biến để chuẩn hóa. Một số Unice (ví dụ nổi tiếng là HP-UX và FreeBSD) không hỗ trợ tập lệnh làm thông dịch viên cho tập lệnh. Cho dù dòng đầu tiên là một, hai hoặc nhiều phần tử được phân tách bằng khoảng trắng khác nhau giữa MacOS (và các phiên bản FreeBSD trước năm 2005) và các phần tử khác. Độ dài đường dẫn được hỗ trợ tối đa khác nhau. ␀
và các ký tự nằm ngoài bộ ký tự tên tệp di động POSIX rất khó, như là khoảng trắng hàng đầu và dấu. Điều mà đối số 0, 1 và 2 kết thúc cũng là khó khăn, với sự thay đổi đáng kể giữa các hệ thống. Một số hiện đang tuân thủ POSIX nhưng không-Các hệ thống unix vẫn không hỗ trợ bất kỳ cơ chế nào như vậy và bắt buộc nó sẽ chuyển đổi chúng thành không còn phù hợp với POSIX.
đọc thêm