Tôi không thể nghĩ ra một tiện ích duy nhất có thể làm những gì bạn mô tả, nhưng nó đủ dễ để biến nó thành một đoạn vỏ.
script=$(curl -s "$url")
printf "%s\nDo you want to run this script? [yN]" "$script"
read line
case $line in
[Yy]|[Yy][Ee][Ss]) sh -c "$script";;
esac
Điều này giả sử tập lệnh là một tập tin văn bản. Null byte không được hỗ trợ: tùy thuộc vào shell, chúng có thể bị xóa hoặc chúng có thể khiến một dòng hoặc toàn bộ tệp bị cắt ngắn. Ngoài ra, tất cả các dòng mới ở cuối tập tin sẽ bị xóa (cấu trúc heredoc thêm một trở lại). Đây thường không phải là một vấn đề đối với một tập lệnh, nhưng nó có thể là, ví dụ, nếu tập lệnh kết thúc với một kho lưu trữ ở định dạng nhị phân mà nó trích xuất. Đây không phải là một cách phân phối tệp rất đáng tin cậy vì có nguy cơ đáng kể kịch bản nhị phân như vậy bị mã hóa sai tại một số điểm. Tuy nhiên, bạn có thể xử lý nó bằng cách viết tập lệnh vào một tệp tạm thời.
script_file=$(mktemp)
curl -s "$url" | tee "$script_file"
printf "Do you want to run this script? [yN]"
read line
case $line in
[Yy]|[Yy][Ee][Ss]) sh "$script_file";;
esac
rm "$script_file"
$()
nên được trích dẫn trên dòng đầu tiên. Ngoài ra, điều này sẽ loại bỏ các ký tự NUL trong đầu vào, có thể hiểu là có thể gây tử vong (ví dụ trong trường hợp tập lệnh tự giải nén).