2012-01-21 18 views
35

Điều này là nhiều hơn về việc gọi chương trình, hơn bất kỳ ngôn ngữ hoặc trình phân tích cú pháp nào (mặc dù tôi chắc chắn rằng sự lựa chọn của thư viện phân tích cú pháp có thể phụ thuộc vào điều này). Hãy xem, tôi đã sử dụng rất nhiều tiện ích dòng lệnh Linux. Và có một số mô hình rõ ràng; '-' đứng trước một chữ cái duy nhất cho các tùy chọn ngắn, nhiều tùy chọn không tham số có thể được kết hợp, '-' đứng trước các phiên bản dài của các tùy chọn, v.v.Có tiêu chuẩn nào cho các thiết bị chuyển mạch dòng lệnh Linux và các đối số không?

Tuy nhiên, trong một số trường hợp, viết hoa được sử dụng để đảo ngược một tùy chọn. Vì vậy, '-d' có thể có nghĩa là chạy như một daemon, nhưng '-D' sẽ là không phải là chạy dưới dạng daemon. (Tại sao không chỉ bỏ qua tùy chọn nếu bạn không muốn nó? Điều đó chưa bao giờ rõ ràng, nhưng nó thực sự khá phổ biến, vì vậy tôi thấy phải có một số lý do.) Nhưng trong một số chương trình, vốn là một lựa chọn hoàn toàn không liên quan; nếu '-d' được chạy dưới dạng daemon, '-D' có thể là để bật chế độ gỡ lỗi. Có một số loại bao quát chính đằng sau này, và đó là tốt nhất để lựa chọn? Hay chúng ta chỉ đang đối phó với "bất cứ công trình nào"?

Ngoài ra còn có một số lệnh, ngoài (hoặc thay thế) các tùy chọn có đối số, chỉ cần lấy các đối số đơn lẻ. cp là một ví dụ tốt về điều này; ngoài một số ít sử dụng Toggles, đối số cuối cùng nó nhận được được coi là đích, và bất kỳ đối số nào giữa danh sách tùy chọn và đích đến được coi là nguồn. Có một quy tắc của ngón tay cái khi nó "okay" để dựa vào thứ tự như thế, thay vì sử dụng cờ tùy chọn rõ ràng với các đối số?

+2

Không có tiêu chuẩn chung cho các tùy chọn dòng lệnh, mặc dù quy ước 'getopt' là điểm bắt đầu tốt. Để trả lời câu hỏi của bạn về các tùy chọn đảo ngược, mặc định thường được chỉ định trong tệp cấu hình, vì vậy, bạn cần cả kích hoạt cưỡng bức và công tắc bật tắt buộc. – Borealid

Trả lời

24

Nói chung, vâng.

+0

Tôi có thể sẽ sử dụng getopt, mặc dù nó không quá hữu ích về tiêu chuẩn. Tuy nhiên, liên kết IEEE đó cực kỳ hữu ích. – DigitalMan

+0

Trong trường hợp bạn chuẩn bị triển khai trình phân tích cú pháp: rất có thể là tìm thư viện phân tích cú pháp cho bất kỳ ngôn ngữ nào, có thư viện phân tích cú pháp cho java python c và tôi đoán nhiều người khác. bánh xe. – ApriOri

+0

Thực ra, đó là công việc của tôi để phát minh lại bánh xe: P Nhưng vì các tùy chọn chỉ được phân tích cú pháp một lần, không cần thiết phải đi với tốc độ lố bịch. Tôi sẽ ghé qua getopt. – DigitalMan

15

ESR đã thu thập rất nhiều thông tin về điều này trong cuốn sách "Nghệ thuật lập trình UNIX" của ông. Đây là một đoạn trích.

-a
Tất cả (không có đối số). Nếu có một tùy chọn kiểu -all-GNU, cho -a là bất cứ điều gì, nhưng một từ đồng nghĩa cho nó sẽ là khá đáng ngạc nhiên. Ví dụ: fuser (1), fetchmail (1).

Nối, như trong tar (1). Điều này thường được ghép nối với -d để xóa.

-b
Kích thước bộ đệm hoặc khối (có đối số). Đặt kích thước bộ đệm quan trọng hoặc (trong một chương trình phải làm với việc lưu trữ hoặc quản lý bộ nhớ phương tiện) đặt kích thước khối. Ví dụ: du (1), df (1), tar (1).

Hàng loạt. Nếu chương trình tương tác tự nhiên, -b có thể được sử dụng để ngăn chặn lời nhắc hoặc đặt các tùy chọn khác thích hợp để chấp nhận đầu vào từ một tệp chứ không phải là toán tử con người. Ví dụ: flex (1).

-c
Lệnh (có đối số). Nếu chương trình là một thông dịch viên thường nhận các lệnh từ đầu vào tiêu chuẩn, thì tùy chọn của đối số -c sẽ được chuyển cho nó dưới dạng một dòng đầu vào . Quy ước này đặc biệt mạnh đối với các trình bao và thông dịch viên giống như trình bao. Ví dụ: sh (1), tro (1), bsh (1), ksh (1), python (1). So sánh -e dưới đây.

Kiểm tra (không có đối số). Kiểm tra tính chính xác của tệp đối số đối với lệnh, nhưng không thực sự thực hiện xử lý thông thường . Thường được sử dụng làm tùy chọn kiểm tra cú pháp bằng các chương trình mà thực hiện việc giải thích các tệp lệnh. Ví dụ: getty (1), perl (1).

Xem danh sách đầy đủ tại http://catb.org/~esr/writings/taoup/html/ch10s05.html

9

Linux/GNU giao diện dòng lệnh theo tiêu chuẩn POSIX. Điều này được ghi nhận bởi GNU trong tiêu chuẩn của chúng: http://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html.

Cú pháp dòng lệnh cũng là một phần của Đặc tả Unix đơn, mặc dù - tùy chọn dài là một đổi mới GNU IIRC.

Xem ở đây: http://pubs.opengroup.org/onlinepubs/7908799/xbd/utilconv.html

Nhưng vâng, tiêu chuẩn này được thực hiện như getopt.

Các vấn đề liên quan