是否可以在 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