POSIX có đảm bảo rằng các tiện ích tiêu chuẩn có trong PATH không?


11

Trong "Command Search and Execution" phần , các đặc điểm kỹ thuật POSIX nói rằng PATHđang tìm kiếm khi tìm kiếm một tiện ích để thực hiện (với một số ngoại lệ). Thông số kỹ thuật có đề cập đến bất cứ nơi nào PATHsẽ được khởi tạo thành một giá trị đảm bảo rằng tất cả các tiện ích tiêu chuẩn sẽ được tìm thấy không?

Hoặc tôi có cần phải làm một cái gì đó như sau để đảm bảo rằng tôi sẽ không bao giờ gặp lỗi "không tìm thấy lệnh" khi cố chạy một tiện ích tiêu chuẩn không?

PATH=$(command -p sh -c 'printf %s "${PATH}"')

(xem thông số kỹ thuật POSIX của commandtiện ích )

Câu trả lời:


13

Có và không. Trong môi trường POSIX, các tiện ích phải hoạt động như được mô tả bởi đặc tả. Trong thực tế, điều này có nghĩa là các phiên bản phù hợp của các tiện ích phải có mặt $PATH. Tuy nhiên, khi chạy chương trình của bạn trên hệ thống tuân thủ POSIX, bạn có thể đang chạy chương trình trong môi trường không tuân thủ. Trong thực tế, điều thường xảy ra là HĐH có chế độ kế thừa và chế độ POSIX và ở chế độ kế thừa theo mặc định. Tệ hơn là thiếu một số lệnh, chế độ kế thừa có xu hướng không tương thích trong chúng, chẳng hạn như các tùy chọn có ý nghĩa khác nhau.

Bạn có thể lấy một tốt PATHvới getconf. Tất nhiên, đó là khó khăn, vì getconftrong bản gốc $PATHcó thể không phải là một trong những quyền. Lệnh sử dụng ứng dụng cho lệnh hiển thị cách thực hiện:

command -p getconf PATH

Theo như tôi hiểu đặc tả, điều này là không cần thiết nếu bạn đang chạy chương trình của mình trong môi trường tuân thủ POSIX; và nếu bạn không chạy chương trình của mình trong môi trường tuân thủ POSIX, POSIX sẽ không áp dụng. Tuy nhiên, việc sử dụng ứng dụng này có thể được coi là một khuyến nghị: nếu điều này không hiệu quả, bạn có thể cảm thấy có quyền khiếu nại với nhà cung cấp của mình rằng bất cứ điều gì họ đang làm liên quan đến thư của thông số POSIX, họ không tuân thủ tinh thần của nó.


Heh, tôi thậm chí không nhận thấy rằng getconf PATHtrong phần sử dụng ứng dụng. Cảm ơn!
Richard Hansen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.