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

edA*_*a-y 8 bash

我想要source一个文件并为该源重定向 STDIN。是否可以?

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

# test.sh
export VALUE=SOMETHING
Run Code Online (Sandbox Code Playgroud)

这适用于外壳:

> source test.sh
> echo $VALUE
SOMETHING
>
Run Code Online (Sandbox Code Playgroud)

然而这不起作用

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

>
Run Code Online (Sandbox Code Playgroud)

有什么方法可以做到这一点,还是因为“源”在当前 shell 中运行而无法暂时重定向 STDIN?

Joh*_*024 13

这不起作用有一个很好的理由:

echo anything | source test.sh
Run Code Online (Sandbox Code Playgroud)

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

您的问题的解决方案是:

 source test.sh < <(echo anything)
Run Code Online (Sandbox Code Playgroud)

使用这种方法,source test.sh在主 shell 中运行。它的标准输入是从echo anything使用进程替换重定向的。

第一个<重定向标准输入。第二个<<(...)创建进程替换的构造的一部分。第一个和第二个之间至少需要一个空间<