Mac:作为 CLI 导出与在 ~/.zshrc 中导出

Mac: export as CLI vs. export in ~/.zshrc

当我试图为 Node.js 设置最大内存时,我想到了这个问题。我被告知在终端中输入 export NODE_OPTIONS=--max_old_space_size=4096,一切都成功了。但是,当我关闭终端并再次打开它时,环境选项消失了。我不得不再次进入它来设置环境。

后来想知道能不能把这个选项写到~/.zshrc文件里,结果发现一次就可以了。

所以,我在想这是否只是巧合,或者它是否像 ./zshrc 文件中的 export 是命令中 export 的永久版本

.zshrc 只是一个文件,每个交互 shell 都获取源文件,就像您在命令行上输入命令一样。

然而,.zprofile 文件是设置环境变量的更好选择。它仅由登录名 shell 提供,但任何 non-login 交互式 shell 都可能最终从某些登录名 shell.

继承其环境

不要忘记 .zshrc 仅用于 interactive shells。如果你也需要non-interactiveshell中的设置,~/.zshenv会是更好的选择。

无论哪种情况,您都必须注意以下后果:

如果您在当前 shell 中手动设置变量,目的是 覆盖 在您的点文件中完成的设置,创建子 shell将再次恢复点文件中的设置,覆盖您当前的设置。

如果不喜欢这种效果,可以在~/.zprofile里面设置值。这只会在 login-shell 中执行(当然也会继承给所有子进程)。仅当您创建一个新的 login-zsh 作为子 shell 时,该文件将被再次获取并销毁您在调用 shell.

中所做的可能的手动更改

另一种可能性是使用,即 ~/.zshenv,但仅当它还没有值时才设置该值:

: ${NODE_OPTIONS:=--max_old_space_size=4096}
export NODE_OPTIONS

尽管这使用两行而不是一行,但这是我推荐的方法,因为它允许您在需要时覆盖所有子 shell 的值,但仍确保合适的默认值已设置,如果没有发生覆盖。