Tổng cộng có bao nhiêu cách để cung cấp một lệnh với đầu vào?


9

Điều đầu tiên tôi nhận thấy về Linux là các cách khác nhau để cung cấp dữ liệu vào một lệnh, tôi biết một số nhưng tôi không biết có tổng số bao nhiêu.

những cách tôi biết cho đến nay:

đường ống:

echo -e "zorro\nwurst\nlahmacun\nsozialhilfe" | sort

từ bàn phím với tín hiệu Kết thúc tập tin:

sort
>gurken
>zucker
>braunkohle

từ tập tin:

sort foo

Chuỗi TẠI ĐÂY (thực sự được gọi là tài liệu TẠI ĐÂY):

sort << HERE
>wasserkopf
>elternzeit
>schuldeingeständnis
>währungsreform
>alabasterhaut
HERE

Đây có phải là tất cả hoặc có nhiều cách để làm điều đó, tại sao có những cách khác nhau, một số cách là dư thừa?

Câu trả lời:


9

Ít nhất là như sau:

  1. Tùy chọn lệnh: foo --bar

  2. Đầu vào tiêu chuẩn: foo | barhoặcbar < foo

  3. (Các) tệp: foo *.*(hoặc bằng cách mở (các) tệp qua mã trong foo)

  4. Xuất khẩu môi trường: export foo=bar; baz

  5. Môi trường (không xuất khẩu): foo=bar bazhoặcenv foo=bar baz

  6. TẠI ĐÂY doc: foo << EOF bar EOF

  7. Chuỗi TẠI ĐÂY: foo <<< bar

  8. Tín hiệu kill -SIGUSR1 $procid

  9. Toàn bộ các giao tiếp giữa các quá trình , như ổ cắm, TCP, các tệp ánh xạ bộ nhớ

† có, tôi nhận ra stdin là một tệp (hoặc giống như tệp). Và việc truyền vào các tệp như thế này thực sự giống như chuyển qua các tùy chọn


1
Bạn có thể thêm foo < bardưới dạng một biến thể bổ sung (tệp qua stdin)
Hagen von Eitzen

14

Để bắt đầu, sort << HEREvà như vậy không phải là một chuỗi ở đây. Đó là một tài liệu ở đây. Chuỗi ở đây sử dụng <<<toán tử. Đó là trong bash (và một số vỏ khác).

Nói chung, có hai cách. Một là thông qua đầu vào tiêu chuẩn (và chuyển hướng), và một là thông qua các tham số.

  1. Đầu vào tiêu chuẩn và chuyển hướng của nó

    Đây là luồng được mặc định kết nối với thiết bị đầu cuối, trong đó một lệnh thực thi và được liên kết với fd (mô tả tệp) 1. Nó được cung cấp bất cứ thứ gì được nhập vào thiết bị đầu cuối. Mặc dù nó (đầu vào) có thể được chuyển hướng như khi sử dụng đường ống |hoặc sử dụng các tài liệu ở đây hoặc chuỗi ở đây. Sau đó, đầu vào không đến từ thiết bị đầu cuối, nhưng được gắn vào đầu ra tiêu chuẩn của lệnh trước đường ống. Các shell khác nhau có các chuyển hướng khác nhau, vì vậy đối với danh mục này, bạn nên kiểm tra tài liệu shell. Tìm kiếm chuyển hướng đầu vào.

  2. Thông số

    Đây là những gì trong ví dụ của bạn là sort foo. Gọi một chương trình hoặc một chức năng bạn truyền cho nó một hoặc nhiều tham số. Một tập tin cục bộ chỉ là một khả năng. Tham số có thể chứa URL hoặc bất cứ điều gì. Các tùy chọn ở đây là vô tận.

Tóm lại, có hai cách chung:

  • cái đầu tiên trừu tượng hóa từ logic bên trong của ứng dụng và thao tác đầu vào tiêu chuẩn ở mức độ OS / shell,

  • trong khi cái thứ hai liên quan đến các bộ phận của ứng dụng và chúng cung cấp các khả năng vô hạn, dựa trên các tham số cuộc gọi như một giao diện.

Đối với cả hai cách, câu trả lời là không có giới hạn. Mặc dù các giới hạn thực tế đi kèm với HĐH / shell và chính ứng dụng.

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.