Một đối số không tùy chọn của người Viking là gì?


9

Tôi đang cố gắng để hiểu info whonhưng hoàn toàn thất bại ở thuật ngữ » đối số không phải tùy chọn «. Ai đó có thể vui lòng giải thích thuật ngữ này cho tôi bằng những từ đơn giản hoặc một ví dụ?

CẬP NHẬT : từ 'thông tin ai':

Nếu không có đối số không phải tùy chọn , `ai 'in thông tin sau cho mỗi người dùng hiện đang đăng nhập: tên đăng nhập, dòng thiết bị đầu cuối, thời gian đăng nhập và tên máy chủ từ xa hoặc hiển thị X.

Nếu được cung cấp một đối số không phải tùy chọn , who' uses that instead of a default system-maintained file (often/ var / run / utmp 'hoặc /etc/utmp') as the name of the file containing the record of users logged on. / var / log / wtmp' thường được cung cấp dưới dạng đối số để 'ai' xem xét ai đã đăng nhập trước đó.

Nếu được đưa ra hai đối số không phải là tùy chọn , who' prints only the entry for the user running it (determined from its standard input), preceded by the hostname. Traditionally, the two arguments given aretôi là ', như trong' tôi là ai '.

Tôi [nghĩ rằng] biết sự khác biệt giữa một đối số và một tùy chọn, nhưng điều này [một lần nữa] lại rất nhiều.


3
Nếu tôi đã chứng kiến ​​thông tin người mà tôi sẽ không bao giờ tin rằng ai đó sẽ sử dụng thuật ngữ "không có đối số không tùy chọn". Điều đó khá khập khiễng.
slm

1
"Thời gian dành cho việc tìm ra những thứ như thế" so với " thực sự học cách sử dụng kiến ​​thức thu được " là khoảng 7: 3 đối với tôi. Điều đó dẫn đến câu hỏi có ý nghĩa nghiêm trọng: Tôi đang làm gì sai?!
erch

1
Tôi nghĩ điều đó khá bình thường, đặc biệt là khi bạn bắt đầu. Sau khi bạn xây dựng một kiến ​​thức cơ bản đủ lớn, bạn có bắt đầu thấy các mẫu lặp lại xung quanh Unix và mọi thứ bắt đầu trở nên dễ dàng hơn. Bao lâu bạn đã ở đó? Bah bạn 20 tuổi? Bạn đang làm tốt, giữ nó, nó sẽ dễ dàng hơn!
slm

1
Phần khó nhất là có được kiến ​​thức, nó cũng trở nên dễ dàng hơn, nhưng ppl đã xây dựng các hệ thống này trong hơn 40 năm, vì vậy đừng mong đợi mọi thứ sẽ đến ngay lập tức, bạn phải muốn nó.
slm

3
Các infotrang GNU có thể đã làm hỏng nhiều hơn để có thể học UNIX. Chúng khó sử dụng và điều hướng hơn các trang man và vì chúng tồn tại, hầu hết mọi người đều coi trang nam thực sự là tùy chọn. Vì vậy, bạn kết thúc với tài liệu khủng khiếp . Đây là một phần của những gì khiến tôi yêu thích BSD, đặc biệt là OpenBSD. Các trang người đàn ông hầu như luôn luôn tốt và hữu ích. Và nếu không, các nhà phát triển coi đó là một lỗi.
kurtm

Câu trả lời:


8

Thuật ngữ này không hoàn toàn cố định, vì vậy các tài liệu khác nhau sử dụng các thuật ngữ khác nhau hoặc tệ hơn là cùng một thuật ngữ với các ý nghĩa khác nhau. Thuật ngữ trong trang người đàn ông bạn đang đọc là một thuật ngữ phổ biến. Nó là cái được sử dụng trong tiêu chuẩn POSIX . Tóm lại, mỗi từ sau lệnh là một đối số và các đối số bắt đầu bằng -là các tùy chọn.

Tranh luận

Trong ngôn ngữ lệnh shell, một tham số được truyền cho một tiện ích tương đương với một chuỗi trong mảng argv được tạo bởi một trong các hàm exec. Đối số là một trong các tùy chọn, đối số tùy chọn hoặc toán hạng theo tên lệnh.

Toán hạng

Một đối số cho một lệnh thường được sử dụng như một đối tượng cung cấp thông tin cho một tiện ích cần thiết để hoàn thành quá trình xử lý của nó. Toán tử thường theo các tùy chọn trong một dòng lệnh.

Lựa chọn

Một đối số cho một lệnh thường được sử dụng để chỉ định các thay đổi trong hành vi mặc định của tiện ích.

Tiện ích của trực tuyến là một thứ thường được gọi là Lệnh Command (tiêu chuẩn sử dụng tiện ích từ để tránh sự mơ hồ với ý nghĩa của lệnh Lệnh ED bao gồm các đối số hoặc thậm chí các lệnh ghép vỏ).

Hầu hết các lệnh tuân theo cú pháp đối số tiện ích tiêu chuẩn , trong đó các tùy chọn bắt đầu bằng một -dấu gạch ngang (dấu gạch ngang hay dấu trừ). Vì vậy, một tùy chọn là một cái gì đó như -a(tùy chọn ngắn, tuân theo các nguyên tắc POSIX) hoặc --all(tùy chọn dài, một phần mở rộng từ GNU). Đối số không phải là tùy chọn là một đối số không bắt đầu bằng -hoặc chỉ bao gồm -( whođối xử như một tên tệp bằng chữ nhưng nhiều lệnh được coi là đầu vào tiêu chuẩn hoặc đầu ra tiêu chuẩn).

Ngoài ra, một số tùy chọn bản thân có một đối số. Đối số này có thể được thông qua theo nhiều cách:

  • Đối với tùy chọn một chữ cái, trong cùng một đối số với tiện ích foo -obar:: barlà đối số cho tùy chọn một chữ cái -o.
  • Trong cú pháp đối số dài GNU, trong cùng một đối số, được phân tách bằng dấu bằng : foo --option=bar.
  • Trong một đối số riêng biệt: foo -o barhoặc foo --option bar. Nếu tùy chọn -o(hoặc --option) nhận một đối số, thì đó barlà đối số của tùy chọn -o(hoặc --option). Nếu -o(hoặc --option) không lấy một đối số thì đó barlà một toán hạng.

Đây là một ví dụ dài hơn:

tail -n 3 myfile

-nlà một tùy chọn, 3là một đối số cho tùy chọn -nmyfilelà một toán hạng.

Thuật ngữ khác nhau, vì vậy bạn có thể tìm thấy các tài liệu sử dụng đối số theo nghĩa POSIX sử dụng toán hạng . Nhưng đối số không có tùy chọn của người Viking thì phổ biến hơn cả thuật ngữ này.


Chỉnh sửa của tôi đã bị từ chối, vì vậy tôi đề cập tất cả trong một nhận xét: 1. Đây là liên kết đến tiêu chuẩn POSIX mới nhất. 2. Đối với các tùy chọn một chữ cái, các đối số tùy chọn được hiển thị tách biệt với các tùy chọn của chúng bằng các ký tự <blank>, ngoại trừ khi đối số tùy chọn là tùy chọn (dù sao đi nữa, tiêu chuẩn không được khuyến khích). 3. "Nếu -okhông có một đối số thì -olà một toán hạng." nên là "... đó barlà một toán hạng`.
David

@David Tôi đã từ chối chỉnh sửa của bạn vì nó đã đưa ra một lỗi mới và vì nó làm cho văn bản khó theo dõi hơn. Tôi không thể tìm ra lỗi nào trong câu trả lời của tôi rằng bạn đã sửa chữa trong số tất cả các thay đổi khác. Cảm ơn đã chỉ ra, tôi sẽ sửa nó. Liên kết với tiêu chuẩn mới nhất so với tiêu chuẩn cũ hơn không quan trọng: đây là thứ rất truyền thống đã không thay đổi trong nhiều thập kỷ.
Gilles 'SO- ngừng trở nên xấu xa'

Trên thực tế, tôi đã không giới thiệu bất kỳ sai lầm. Nó đã bị từ chối trong " Tùy chọn dài cũng có thể tách riêng đối số của họ ". Tôi đã không viết bất cứ điều gì về các tùy chọn dài, bạn đã làm :) Vấn đề là tôi thay đổi thứ tự của 3 mục trong danh sách và tiện ích khác biệt làm nổi bật sự khác biệt giữa cả hai phiên bản đã hoàn toàn bị rối tung. Thật khó để thấy rằng tôi đã thay đổi rất ít: chỉ những gì tôi đã đề cập trong bình luận của tôi. Tôi đồng ý rằng liên kết đến tiêu chuẩn mới là không quan trọng. Tôi đã làm điều đó bởi vì nó giải thích rõ ràng hơn rằng cú pháp -obarđược dành riêng cho các đối số tùy chọn tùy chọn.
David

Xin vui lòng, xóa tất cả các ý kiến ​​sau khi đọc chúng; họ không thêm gì vào câu trả lời. Và cho phép tôi nói lời cảm ơn vì tất cả những đóng góp của bạn cho cộng đồng này và StackOverflow. Và tôi không có nghĩa là chỉ cung cấp câu trả lời tuyệt vời.
David

5

Vấn đề là, các tùy chọn (hoặc công tắc hoặc cờ, bất cứ điều gì bạn muốn gọi chúng) cũng được tính là đối số. Trong thực tế, bất cứ thứ gì bạn cung cấp sau chính tên lệnh sẽ tạo nên các đối số của lệnh (ngoại trừ các cấu trúc được sử dụng bởi shell như chuyển hướng chẳng hạn).

Chương trình / tập lệnh của bạn nhận mọi thứ cùng nhau dưới dạng đối số và cần tách các đối số tùy chọn (đối số là tùy chọn) khỏi ... bạn đoán nó! ... đối số không phải tùy chọn .

Vì vậy, những gì trang thông tin đang nói là nếu whonhận được một đối số không phải là một tùy chọn, nó sẽ coi đó là một thay thế cho tệp mặc định mà nó liên quan đến thông tin đăng nhập.


3
Nếu tôi không chứng kiến ​​thì info whotôi sẽ không bao giờ tin rằng ai đó sẽ sử dụng thuật ngữ "không có đối số không có tùy chọn". Điều đó khá khập khiễng.
slm

@slm Tôi không biết về điều đó. Vẫn đúng về mặt kỹ thuật, mặc dù ...
Joseph R.

Tôi có đúng không: mọi thứ không phải là một tùy chọn không phải là đối số ?! ** Và còn: tùy chọn = switch = flag = argument ?
erch

@chirp Mọi thứ không phải là một tùy chọn vẫn là một đối số nhưng đó là một đối số không phải là tùy chọn . Chỉ để thêm vào sự nhầm lẫn: một số tùy chọn có thể có đối số :) Oh và tùy chọn = switch = cờ giữ lỏng lẻo, vâng.
Joseph R.

1

Tôi vẫn nghĩ rằng phrasing là kém về điều này và sẽ cố gắng không bị treo lên. Điều họ đang cố gắng nói là trong tuyên bố nguyên mẫu, chúng bao gồm như thế này:

 `who' [OPTION] [FILE] [am i]

Vì vậy, khi họ nói "Nếu không có đối số không có tùy chọn", họ sẽ đề cập đến [FILE][am i].

Theo logic đó khi họ nói "Nếu được cung cấp một đối số không phải tùy chọn", nghĩa là [FILE], bạn đang ghi đè [FILE]vị trí , /var/run/utmp.

Cuối cùng cho nhận xét này, "Nếu được cung cấp hai đối số không phải tùy chọn", tức là [am i]bạn đang yêu cầu thông tin về người dùng vừa chạy lệnh:

$ who am i
saml     pts/5        2013-10-18 16:29 (:0.0)

-or-

$ who mom likes
saml     pts/5        2013-10-18 16:29 (:0.0)

Mô tả là apt, nhưng họ chắc chắn đã nhầm lẫn nó bằng cách sử dụng thuật ngữ "không có đối số không phải tùy chọn".

Trong tâm trí tác giả, đây là những lựa chọn:

  -a, --all         same as -b -d --login -p -r -t -T -u
  -b, --boot        time of last system boot
  -d, --dead        print dead processes
  -H, --heading     print line of column headings
  -l, --login       print system login processes
      --lookup      attempt to canonicalize hostnames via DNS

  ....

[FILE][am i][mom likes]là phi tùy chọn. Nhưng đây là TẤT CẢ các tùy chọn, vì vậy sự khác biệt chỉ giới hạn ở công cụ này!


1
Đối số không phải là tùy chọn của người Viking là thuật ngữ hoàn toàn chuẩn (cả nghĩa đen và thông tục). Xem câu trả lời của tôi .
Gilles 'SO- ngừng trở nên xấu xa'

1
@Gilles - Tôi đoán bạn hoặc Stephane sẽ giải thích điều này, tôi vẫn nghĩ thuật ngữ này là kém. Xác định mọi thứ theo cách này giống như sử dụng ngôn ngữ phủ định khi xác định điều kiện trong câu lệnh if. if ($notStatus != option). Tôi hiểu ý nghĩa của nó nhưng nó khó hiểu nhất. Câu trả lời tốt BTW, mỗi ngày 8-)
slm
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.