Làm cách nào để truyền đối số cho tập lệnh được nhập vào bash


10

Ngay bây giờ tôi có một lớp lót như thế này:

curl -fsSL http://git.io/vvZMn | bash

Nó đang tải tập lệnh và chuyển nó vào bash dưới dạng tệp stdin. Tôi muốn chạy tập lệnh này với đối số bổ sung print.

Có lẽ một cái gì đó như thế này?

curl -fsSL http://git.io/vvZMn | bash -- print

Nhưng điều này không làm việc.


4
Bạn đang mong đợi printlàm gì ở đây? Hiển thị các lệnh đang được chạy? Nếu vậy, hãy thử bash -x. Lưu ý: curl | bashthói quen này là một lỗ hổng bảo mật lớn; bạn không được xem cái gì sẽ được chạy cho đến khi máy chủ của bạn bị xóa.
Stephen Harris

Câu trả lời:


16

Tôi tin rằng những gì bạn đang tìm kiếm là -stùy chọn. Với -s, bạn có thể truyền đối số cho kịch bản.

Như một ví dụ giả để minh họa điều này:

$ echo 'echo 1=$1' | bash -s -- Print
1=Print

Ở đây, bạn có thể thấy rằng tập lệnh được cung cấp trên stdin được đưa ra tham số vị trí Print. Kịch bản của bạn có một -u UUIDđối số và điều đó cũng có thể được cung cấp:

$ echo 'echo arguments=$*' | bash -s -- -u UUID print
arguments=-u UUID print

Vì vậy, trong trường hợp của bạn:

curl -fsSL http://git.io/vvZMn | bash -s -- print

Hoặc là,

curl -fsSL http://git.io/vvZMn | bash -s -- -u UUID print

Như Stephen Harris đã chỉ ra, tải xuống một kịch bản và thực hiện nó, không nhìn thấy được, là một mối quan tâm bảo mật.


3

Nếu hệ thống của bạn có /dev/stdin, bạn có thể sử dụng

$ echo 'echo 1=$1' | bash /dev/stdin print
1=print

Đừng không làm điều này:

$ echo 'echo 1=$1' | bash /dev/stdin -- print
1=--

Nếu bạn muốn sử dụng --, hãy làm điều này:

$ echo 'echo 1=$1' | bash -- /dev/stdin print
1=print
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.