什么时候需要导出变量?

什么时候需要导出变量?

很久以前,当我第一次开始在 bash 中分配变量时,它是这样的:

export EDITOR=nano
export PS1=something

...以及喜欢的东西。出口的习惯一直困扰着我。

然而,现在我年纪大了,希望更明智一点,我知道这不是必需的,所以我的问题是:什么时候需要?什么时候不是呢?我很少在简单的.bashrc事情之外进行变量赋值,因为我编写的任何脚本都是在 perl 中完成的。

答案1

很难完整而准确地回答这个问题,因为这样做的目的export是将名称/值对(EDITOR=nano例如)放入导出 shell 的子进程继承的信息中。

一般来说,您想要导出您在 : 中设置的内容.bashrc:EDITOR是一个很好的例子,因为它设置了您对文本编辑器的偏好,邮件程序、数据库接口和许多其他程序使用文本编辑器来决定当这些程序之一希望您编辑某些内容时运行哪个程序文本。我EDITOR=vi自己用。其他常见的例子.bashrcORACLE_HOMEPATHVISUALTERMSHELL我通过做man more并阅读环境部分得到了这些。

既然我已经写了“一般情况”,我必须注意,除了 和 之外EDITORVISUAL环境值还有很多、多种多样并且特定于某些子系统。使用臭名昭著的 Oracle 数据库系统做任何事情都需要大量额外的环境值,其中很多都是迷信的。由于 shell 的环境是一组名称/值对,因此各个系统可以以各种不同的方式使用该环境。 Apache Web 服务器将许多值传递给CGI-BIN环境中的程序。

我的建议是导出尽可能少的变量。不要污染您的交互环境,因为您永远无法知道某些程序何时决定使用您的秘密环境变量的值。编写小型 shell 脚本,其作用只不过是设置环境变量,然后运行需要这些变量的程序。

如果您为交互式环境设置了大量环境变量,那么您会感到惊讶,如果您尝试从cron-运行某些内容crond,则不会正确设置环境,并且您将不知道为什么。

相关内容