Por que o bash gera dados em vez de executar, quando um script é canalizado?

1

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?

    
por Fluffy 03.02.2015 / 10:27

1 resposta

3

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.

    
por 03.02.2015 / 11:35

Tags