Você terá que fechar (ou redirecionar de outra forma) a entrada padrão dos comandos individuais:
#!/bin/bash
apt-get purge -y nginx <&-
apt-get install -y nginx <&-
date
Caso contrário, linhas subsequentes são alimentadas para os comandos.
Estou executando o seguinte script no Ubuntu 14.04:
#!/bin/bash
apt-get purge -y nginx
apt-get install -y nginx
date
Quando eu executo como cat /tmp/script | bash
, o apt-get inicia a instalação, então "data" é impressa (não a data real, mas o nome do comando), então a saída restante do apt-get é impressa.
Se, no entanto, eu executar o script como /tmp/script
, ele funcionará como esperado: imprimindo a data após o término do apt-get.
Por que isso acontece e como posso forçar o bash a funcionar quando ele é canalizado da mesma maneira que quando invocado diretamente?
Você terá que fechar (ou redirecionar de outra forma) a entrada padrão dos comandos individuais:
#!/bin/bash
apt-get purge -y nginx <&-
apt-get install -y nginx <&-
date
Caso contrário, linhas subsequentes são alimentadas para os comandos.