วิธีการส่งผ่านข้อโต้แย้งไปยังสคริปต์ซึ่งเป็นอินพุตเพื่อทุบตี


10

ตอนนี้ฉันมีซับในแบบนี้:

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

มันกำลังดาวน์โหลดสคริปต์และส่งต่อเพื่อทุบตีเป็นไฟล์ stdin printผมอยากจะเรียกใช้สคริปต์นี้กับอาร์กิวเมนต์เพิ่มเติม

อาจจะเป็นเช่นนี้?

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

แต่มันไม่ได้ผล


4
คุณคาดหวังว่าprintจะทำอะไรที่นี่? แสดงคำสั่งที่กำลังทำงานอยู่หรือไม่ bash -xถ้าเป็นเช่นนั้นลอง หมายเหตุ: curl | bashรูทีนนี้เป็นช่องโหว่ขนาดใหญ่ คุณไม่ได้เห็นสิ่งที่จะทำงานจนกว่าเซิร์ฟเวอร์ของคุณจะถูก pwned
Stephen Harris

คำตอบ:


16

ฉันเชื่อว่าสิ่งที่คุณกำลังมองหาคือ-sตัวเลือก ด้วย-sคุณสามารถส่งผ่านข้อโต้แย้งไปยังสคริปต์

เป็นตัวอย่างที่แสดงให้เห็นถึงสิ่งนี้:

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

ที่นี่คุณสามารถเห็นได้ว่าสคริปต์ที่มีให้ใน stdin Printจะได้รับพารามิเตอร์ตำแหน่ง สคริปต์ของคุณรับการ-u UUIDโต้แย้งและสามารถรองรับได้:

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

ดังนั้นในกรณีของคุณ:

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

หรือ,

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

สตีเฟ่นแฮร์ริสชี้ให้เห็นว่าการดาวน์โหลดสคริปต์และดำเนินการมันมองไม่เห็นเป็นเรื่องความปลอดภัย


3

หากระบบของคุณมี/dev/stdinคุณสามารถใช้

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

อย่าได้ทำเช่นนี้:

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

ถ้าคุณต้องการใช้--ทำสิ่งนี้:

$ echo 'echo 1=$1' | bash -- /dev/stdin print
1=print
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.