我正在使用oh-my-zsh dotenv plugin,只要我.env
进入项目目录,就会加载cd
文件(如果存在)。
我知道它有效,因为我可以在运行set
cmd时看到自定义环境变量。
我也可以从命令行回显我的自定义环境变量:
$ echo $FOO
'foo'
但是,我无法通过env
命令或Ruby访问此环境变量:
$ irb
2.4.1 :001 > ENV['FOO']
nil
如何确保从我的.env
加载的环境变量可以从Ruby访问?
答案 0 :(得分:0)
与documentation of dotenv
中所述内容相反,您实际上需要在export
文件中使用.env
关键字才能使参数可用于环境,例如
export FOO=foo
唯一的例外是,如果参数已经是环境变量。例如,如果它已在~/.zshrc
中导出,或者它已经是zsh
在启动时获得的环境的一部分(例如PATH
或HOME
)。
所有dotenv
在更改到目录时会自动获取任何.env
文件。没有额外的“魔力”。这意味着.env
需要是一个有效的zsh
脚本,其内容在当前shell会话的上下文中运行(基本上就像您手动键入它一样)。
这也意味着通常的规则适用。也就是说,只有设置参数使它们仅可用于当前的shell上下文。为了使它们可用作环境变量,需要将它们导出(在设置之前,期间或之后)。因此,除非之前已导出参数,export
在.env
中并非真正“可选”。