Geralmente bash
não se importa se está lendo seus comandos de um arquivo (como em bash foo
) ou de STDIN (como em bash <foo
). No entanto, agora você inicia um comando ( apt-get
) que por si só quer perguntar ao usuário e usa, sim, STDIN para fazer isso.
Este pequeno script demonstrará o que está acontecendo:
echo "hello"
read -p "how do you do? "
echo "I understand"
echo "you are '$REPLY'."
echo "bye"
Salve-o em um arquivo e execute-o primeiro como bash -x foo
e depois como bash -x <foo
.
A mesma coisa acontecerá no seu exemplo.
Uma solução seria usar a substituição de processos:
bash -x <(cat foo)
ou, no seu caso, simplesmente:
bash <(curl -s0 https://myserver.com/install.sh)
Algumas observações:
Sempre que algum script de shell faz coisas estranhas, use bash -x
para ver o que está acontecendo.
Escrever cat foo| ...
é conhecido como Uso inútil do gato . Apenas use o redirecionamento.