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.