Fish Shell:如何使用导出从文件中设置多个环境变量

Fish Shell:如何使用导出从文件中设置多个环境变量

是否可以在 Fish Shell 中通过导出设置环境变量?我正在开发一个以这种方式配置变量的项目,仅仅为鱼维护一个单独的配置文件是没有意义的。

在 bash 中考虑这个例子:

echo -e "foo=1\nfoobar=2\n" > foo; export $(cat foo | xargs); env | grep foo

   foo=1
   foobar=2

在fish shell中,它似乎只会设置一个变量,并且仅当文件中有一个变量时:

~ $ echo -e "foo=3\nfoobar=4" > foo; export (cat foo | xargs); env | grep foo

~ $ echo -e "foo=3" > foo; export (cat foo | xargs); env | grep foo

   foo=3

这只是 Fish 出口实施中的一个缺陷/遗漏吗?

这个问题与另外两个帖子相似但不同:

答案1

你的例子几乎完美地工作 - 这不是export问题,而是使用xargs.

尝试:

echo -e "foo=3\nfoobar=4" > .env; export (cat .env);  env | grep foo

原因是命令替换分隔换行符上的参数,并将xargs其删除:

> count (cat .env | xargs)
1
> count (cat .env)
2

答案2

在 Fish 中,我希望您会收到以下错误export

$ echo -e "foo=1\nfoobar=2\n" > foo; export (cat foo | xargs);  env | grep foo
bash: --: command not found...
fish: echo -e "foo=1\nfoobar=2\n" > foo; export (cat foo | xargs);  env | grep foo
                                         ^

如果您有一个包含行的文件variable=value并且您想使用它来设置环境变量:

$ cat foo
foo=1
foobar=2

$ source (sed -rn 's/^([^=]+)=(.*)/set -x \1 \2/p' foo | psub)
$ set -x | grep foo
foo 1
foobar 2

相关内容