บอกว่าฉันมีไฟล์ที่ URL "http://mywebsite.com/myscript.txt" ที่มีสคริปต์:
#!/bin/bash
echo "Hello, world!"
read -p "What is your name? " name
echo "Hello, ${name}!"
และฉันต้องการเรียกใช้สคริปต์นี้โดยไม่บันทึกเป็นไฟล์ก่อน ฉันจะทำสิ่งนี้ได้อย่างไร
ตอนนี้ฉันได้เห็นไวยากรณ์:
bash < <(curl -s http://mywebsite.com/myscript.txt)
แต่ดูเหมือนว่ามันจะไม่ทำงานถ้าหากฉันบันทึกลงไฟล์แล้วก็ดำเนินการ เช่น readline ไม่ทำงานและผลลัพธ์เป็นเพียง:
$ bash < <(curl -s http://mywebsite.com/myscript.txt)
Hello, world!
ฉันได้ลอง:
curl -s http://mywebsite.com/myscript.txt | bash -s --
ด้วยผลลัพธ์เดียวกัน
เดิมทีฉันมีวิธีแก้ปัญหาเช่น:
timestamp=`date +%Y%m%d%H%M%S`
curl -s http://mywebsite.com/myscript.txt -o /tmp/.myscript.${timestamp}.tmp
bash /tmp/.myscript.${timestamp}.tmp
rm -f /tmp/.myscript.${timestamp}.tmp
แต่ดูเหมือนจะเลอะเทอะและฉันต้องการทางออกที่หรูหรากว่า
ฉันรับทราบถึงปัญหาด้านความปลอดภัยเกี่ยวกับการเรียกใช้เชลล์สคริปต์จาก URL แต่เราไม่ต้องสนใจเรื่องทั้งหมดในตอนนี้
cmd <<foo
เป็นไวยากรณ์ heredoc ในเชลล์ส่วนใหญ่และอาจไม่ใช่สิ่งที่คุณต้องการ
mktemp
แทนการใช้โซลูชันของคุณเอง