Como redirecionar o comando stdin para bash source?

5

Eu gostaria de source um arquivo e redirecionar STDIN para essa fonte. É possível?

Exemplo, eu tenho esse arquivo que desejo fornecer:

# test.sh
export VALUE=SOMETHING

Isso funciona em um shell:

> source test.sh
> echo $VALUE
SOMETHING
>

No entanto, isso não funciona

> echo anything | source test.sh
> echo $VALUE

>

Existe alguma maneira de isso ser feito, ou é porque "source" é executado no shell atual que ele não pode redirecionar STDIN temporariamente?

    
por edA-qa mort-ora-y 22.01.2014 / 09:23

1 resposta

10

Há uma boa razão para isso não funcionar:

echo anything | source test.sh

É porque o acima é um pipeline. Consequentemente, source test.sh é executado em uma subcamada. Isso significa que qualquer variável de ambiente criada é descartada quando sua execução é concluída.

A solução para o seu problema é:

 source test.sh < <(echo anything)

Com essa abordagem, source test.sh é executado no shell principal. Seu stdin é redirecionado de echo anything usando substituição de processo .

O primeiro < redireciona stdin. O segundo < é parte da construção <(...) que cria um substituição de processos . Pelo menos um espaço entre o primeiro e o segundo < é necessário.

    
por 22.01.2014 / 09:29

Tags