如何重定向 bash 源命令的标准输入?

如何重定向 bash 源命令的标准输入?

我想要source一个文件并重定向该源的 STDIN。可以吗?

例如,我有这个希望获取的文件:

# test.sh
export VALUE=SOMETHING

这在 shell 中有效:

> source test.sh
> echo $VALUE
SOMETHING
>

但这并不奏效

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

>

有什么方法可以做到这一点,或者是因为“源”在当前 shell 中运行,所以它不可能暂时重定向 STDIN?

答案1

有一个很好的理由可以解释为什么这种方法行不通:

echo anything | source test.sh

这是因为上面的代码是管道。因此,它source test.sh在子 shell 中运行。这意味着它创建的任何环境变量都会在执行完成后被丢弃。

解决您问题的方法是:

 source test.sh < <(echo anything)

使用此方法,在主 shell 中运行。其 stdin 从使用source test.sh重定向echo anything流程替代

第一个<重定向 stdin。第二个<是构造的一部分<(...),它创建了一个流程替代。第一个和第二个之间至少<需要有一个空格。

相关内容