Quando você canaliza a saída de curl
para sh
, está tornando o texto do script a entrada padrão do shell, que o utiliza como comandos a serem executados. Depois disso, não resta mais nada para read
. Mesmo se fosse tentar, não receberia nada da entrada do terminal, porque não está conectado a ela. O pipe substituiu a entrada padrão para o processo sh
.
O próximo problema é que read -i
não é um recurso POSIX sh , mas sim uma extensão suportada por bash
. O Ubuntu usa dash
, um shell mínimo compatível com POSIX com extensões mínimas, como /bin/sh
por padrão. É por isso que rejeita especificamente a opção -i
(embora suporte -p
).
Se você estiver usando um shell mais capaz, tente algo como:
bash <(curl http://example.com/provisioning.sh)
que cria um canal para bash
ler a saída de curl
e fornece como argumento do arquivo de script. Nesse caso, a entrada padrão do script ainda está conectada ao terminal e read
funcionará (mas observe a grande advertência abaixo da linha).
Também observarei que " curl | sh
" é geralmente franziu a testa sobre como um problema de segurança óbvio, mas você conhece melhor a situação em que seu script está.