1

我有 .sh 文件,我想将其点源到我的运行环境中。这不起作用:

curl -s https://raw.githubusercontent.com/bla/bla/master/stuff.sh | bash

上面的不行,即脚本运行,但是环境变量和里面stuff.sh的东西没有点源到运行环境中。我也试过:

. curl -s https://raw.githubusercontent.com/bla/bla/master/stuff.sh | bash
curl -s https://raw.githubusercontent.com/bla/bla/master/stuff.sh | bash source
curl -s https://raw.githubusercontent.com/bla/bla/master/stuff.sh | source bash

都失败了。希望知道如何做到这一点?

4

2 回答 2

1

我不是 bash 专家,但如果您愿意接受一些缺点,那么最简单的方法就是不使用管道。我相信当你分开下载和采购时应该是可能的:

prompt># curl -s https://raw.githubusercontent.com/bla/bla/master/stuff.sh > ./stuff.sh
prompt># . ./stuff.sh

来自 bash 手册 ( man bash),在关于内置source命令的章节中:

从文件名读取和执行命令 [...]

没有提到标准输入作为应该来源的命令的可能来源。

但是,正如 hanshenrik 在他的回答中所说,您始终可以使用进程替换来创建一个临时(并且在文件系统上不可见)文件,您可以将其提供给source. 语法是<(list), where<(list)扩展为 bash 选择的唯一文件名,并且list是一系列命令,其输出被放入该文件中(尽管该文件不会出现在文件系统上)。

进程替换记录在 bash 手册 ( man bash) 中该确切标题下的一段中。

于 2020-11-22T11:57:15.350 回答
1

尝试

source <(curl -s https://raw.githubusercontent.com/bla/bla/master/stuff.sh)

我试着做

curl -s https://raw.githubusercontent.com/bla/bla/master/stuff.sh | source /dev/stdin

但这由于某种原因不起作用,不知道为什么(有人知道吗?)

于 2020-11-22T12:50:03.120 回答