Không thể hiểu kịch bản này. bash << (curl -s http://xxx.com)


7

Trong một cuốn sách đường ray, tác giả đã viết kịch bản để cài đặt rvm ruby.

bash <<(curl -s https://rvm.beginrescueend.com/install/rvm)

Nhưng tôi không hiểu làm thế nào nó hoạt động. Bạn có thể giải thích điều này?


6
Là một sidenote, dán các lệnh tải xuống sau đó thực thi các tập lệnh không đáng tin cậy trên internet là thực tế xấu.
donothings thành công

2
@donothingsuccessfully Đó cũng là suy nghĩ đầu tiên của tôi. Tôi tự hỏi, nếu tác giả đã viết về ý nghĩa bảo mật, ví dụ: nếu Beginrescueend.com rơi vào tay một kẻ chộp tên miền ~ 10 năm trong tương lai. Anh ta nên có.
Residuum

Câu trả lời:


11

Có một toán tử << (tài liệu ở đây) nhưng nó không phải là những gì được sử dụng ở đây.

Trước tiên, bạn có một chuyển hướng đầu vào <trong đó cho biết chọn đầu vào từ đối số sau, sau đó có sự <(command)thay thế quy trình gọi là thay thế bởi một bộ mô tả tệp có chứa đầu ra của lệnh.

Lệnh này có thể đã được viết

bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)

nhưng chỉ là một cách làm phức tạp:

curl -s https://rvm.beginrescueend.com/install/rvm | bash

4

one <<(two)chạy lệnh twovà dẫn đầu ra của nó vào one. Cách viết phổ biến hơn two | one, vì vậy lệnh của bạn cũng có thể được viết:

curl -s https://rvm.beginrescueend.com/install/rvm | bash

Liên kết đó đã bị hỏng ngay bây giờ, nhưng trang web nói sẽ sử dụng thay thế này:

curl -L get.rvm.io | bash -s stable

curlxuất ra những gì nó tải xuống, vì vậy điều này tải tập tin vào get.rvm.iovà chuyển nội dung của nó vào bash. Nếu bạn chỉ chạy curllệnh đó, bạn có thể thấy bashtập lệnh tải xuống và cài đặt rvm


Sử dụng đường ống |là quen thuộc hơn với tôi. Tại sao anh ta sử dụng cú pháp kỳ lạ. Là sử dụng đó là một xu hướng?
Benjamin

Một điều nữa. Làm thế nào để bạn phát âm << toán tử? Nó được gọi là pipemột trong hai?
Benjamin

3
@Benjamin <<là nhà điều hành tài liệu ở đây . foo < <(bar)Hầu hết tương đương với bar | foo, nhưng với một vài điểm khác biệt không quan trọng ở đây: chủ yếu, với < <(…), foothực thi trong môi trường shell chính và lệnh trả về khi footrả về, trong khi với một đường ống, foothực thi trong một lớp con và đường ống chờ cả hai các lệnh để hoàn thành. (Đó là trong bash, hành vi này là chặt chẽ hơn trong ksh và zsh.)
Gilles 'Somali dừng vốn là xấu'

@Gilles. ồ bình luận bất ngờ. đó là một điểm hay. cảm ơn bạn.
Benjamin
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.