Я не могу придумать ни одной утилиты, которая бы делала то, что вы описываете, но достаточно легко сделать это фрагментом оболочки.
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
Это предполагает, что скрипт представляет собой текстовый файл. Нулевые байты не поддерживаются: в зависимости от оболочки они могут быть удалены или могут привести к усечению строки или всего файла. Также удаляются все новые строки в конце файла (конструкция heredoc добавляет один обратно). Обычно это не проблема для сценария, но это может быть, например, если сценарий заканчивается архивом в двоичном формате, который он извлекает. Это не очень надежный способ распространения файла, поскольку существует значительный риск того, что такой бинарный скрипт в какой-то момент будет неправильно закодирован. Тем не менее, вы можете справиться с этим, записав скрипт во временный файл.
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"
$()
должны быть указаны в первой строке. Кроме того, это приведет к удалению NUL-символов во входных данных, что может быть фатальным (например, в случае самораспаковывающегося скрипта).