Giả sử tôi có một tệp tại URL "http://mywebsite.com/myscript.txt" có chứa tập lệnh:
#!/bin/bash
echo "Hello, world!"
read -p "What is your name? " name
echo "Hello, ${name}!"
Và tôi muốn chạy tập lệnh này mà không lưu tập tin vào tập tin trước. Làm thế nào để tôi làm điều này?
Bây giờ, tôi đã thấy cú pháp:
bash < <(curl -s http://mywebsite.com/myscript.txt)
Nhưng điều này dường như không hoạt động như nếu tôi lưu vào một tệp và sau đó thực thi. Ví dụ, đường đọc không hoạt động và đầu ra chỉ là:
$ bash < <(curl -s http://mywebsite.com/myscript.txt)
Hello, world!
Tương tự, tôi đã thử:
curl -s http://mywebsite.com/myscript.txt | bash -s --
Với kết quả tương tự.
Ban đầu tôi có một giải pháp như:
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
Nhưng điều này có vẻ cẩu thả, và tôi muốn một giải pháp thanh lịch hơn.
Tôi nhận thức được các vấn đề bảo mật liên quan đến việc chạy tập lệnh shell từ URL, nhưng bây giờ hãy bỏ qua tất cả những điều đó.
cmd <<foo
là cú pháp heredoc trong hầu hết các shell và có thể không phải là những gì bạn muốn.
mktemp
thay vì tung ra giải pháp của riêng mình