Chuyển hướng của <<


32

Tôi đã thấy rằng rvm (trình quản lý phiên bản ruby) được cài đặt bằng lệnh sau:

bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )

Vì vậy, khi tôi hiểu, chúng tôi có được nội dung kịch bản và chuyển nó đến bash (tôi tin < <<<có phải là điều tương tự không?) Tôi quan tâm đến < <phần này, được tìm thấy sau mô tả trên mạng:

<< Mã thông báo Có nghĩa là sử dụng luồng đầu vào hiện tại làm STDIN cho chương trình cho đến khi mã thông báo được nhìn thấy.

Điều này bằng cách nào đó không rõ ràng đối với tôi, ai đó có thể làm một ví dụ hoặc giải thích nó theo cách đơn giản hơn?

Câu trả lời:


40

Không, < <<<không phải là điều tương tự.

Đầu tiên bao gồm các <ký tự chuyển hướng chung kết hợp với ký tự đầu tiên của <(command)cú pháp. Đây là một kshcấu trúc (cũng được tìm thấy trong bashzsh) được gọi là sự thay thế quá trình lấy đầu ra của commandvà cung cấp nó trong một tệp có tên liên quan đến đầu kia của ống commandđược ghi vào.

Nói cách khác, bạn có thể nghĩ < <(command)như là < file, nơi tập tin chứa đầu ra của command.


5
Tôi đã biết về lệnh này vài ngày trước, đây là một lệnh rất hữu ích. Những điều bạn có thể làm với điều này chỉ bị giới hạn bởi trí tưởng tượng của bạn: ví dụ: lệnh này cung cấp cho bạn một danh sách chỉ các tệp bị ẩn:diff <(ls) <(ls -a)
Khaja Minhajuddin

1
Cú pháp này thực sự có thể khá hữu ích nhưng trong trường hợp cụ thể của Stonerain, nó dường như không cung cấp bất kỳ giá trị gia tăng nào so với một đường ống đơn giản.
jlliagre

1
Trong cú pháp trên, nó không có ích. Nhưng nếu bạn thay đổi một chút, sẽ tốt hơn nhiều: bash <(curl ...)thay vì bash < <(curl ...)không ăn cắp STDIN, vì vậy bạn có thể trả lời các lời nhắc và cung cấp đầu vào trong tập lệnh.
tylerl

Sử dụng <() dường như là một cách thay thế tuyệt vời để gửi trực tiếp nhiều biến $ cho các lệnh, thay vì phải viết các biến $ vào tệp một cách không cần thiết trước tiên. diff <(echo "$ text1") <(echo "$ Text2") stackoverflow.com/questions/13437104/...
Sepero

18

Đó là một cách đơn giản để làm đơn giản hơn:

curl -s https://raw.github.com/... | bash
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.