我的网络服务器上有一个文件 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)