源 (.) 管道式卷曲输出

源 (.) 管道式卷曲输出

我的网络服务器上有一个文件 f,其中包含以下内容:

alias ll='ls -l'

我想(从另一个 Linux 机器)执行以下操作,但我无法正确执行命令:

curl http://myserver/f | ?

哪里的?会将每一行读入当前环境。因此,考虑到上面的文件,这将具有与执行相同的效果

% alias ll='ls -l'

在当前的 shell 进程中。这可能吗?

答案1

使用怎么样eval "$(curl "$URL")"

但您最好确保获得正确的 URL,并且下载的代码不会执行任何令人讨厌的操作。

答案2

在 Bash 中,您可以在将命令/dev/stdin的输出重定向curl/dev/stdin单行后尝试进行采购,如下所示:

source /dev/stdin  <<< "$(curl http://myserver/f)"

这应该避免在子 shell 中进行(源)变量赋值(这对于父 shell 来说是不可见的)。

答案3

管道似乎总是产生一个子 shell。也许文件替换在这里更合适。

## this doesn't work
# curl http://myserver/f | . /dev/stdin

## this works
. <(curl http://myserver/f)

相关内容