如何永久设置环境变量

如何永久设置环境变量

我的变量是

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
ORACLE_HOME=/usr/lib/oracle/11.2/client64

如何永久保存这些变量?

答案1

您可以将其添加到该文件.profile或您的登录 shell 配置文件(位于您的主目录中)。

要“永久”更改环境变量,您至少需要考虑以下情况:

  1. 登录/非登录 shell
  2. 交互式/非交互式 shell

巴什

  1. Bash 作为登录 shell 将按顺序加载/etc/profile, ~/.bash_profile, ~/.bash_login,~/.profile
  2. Bash 作为非登录交互式 shell 将加载~/.bashrc
  3. Bash 作为非登录非交互式 shell 将加载环境变量中指定的配置$BASH_ENV
$EDITOR ~/.profile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

桀骜

$EDITOR ~/.zprofile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

set -Ux LD_LIBRARY_PATH /usr/lib/oracle/11.2/client64/lib
set -Ux ORACLE_HOME /usr/lib/oracle/11.2/client64

$EDITOR ~/.profile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

伯恩

$EDITOR ~/.profile
#add lines at the bottom of the file:  
     LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib     
     ORACLE_HOME=/usr/lib/oracle/11.2/client64
     export LD_LIBRARY_PATH ORACLE_HOME

csh 或 tcsh

$EDITOR ~/.login
#add lines at the bottom of the file:  
     setenv LD_LIBRARY_PATH /usr/lib/oracle/11.2/client64/lib
     setenv ORACLE_HOME /usr/lib/oracle/11.2/client64

如果您想让它对所有用户永久生效,您可以编辑 下的相应文件/etc/,即/etc/profile对于 Bourne-like shell、/etc/csh.login对于 (t)csh 以及/etc/zsh/zprofile对于/etc/zsh/zshrczsh。

另一种选择是使用/etc/environment,它在 Linux 系统上由 PAM 模块读取pam_env,并且仅支持简单的赋值,而不支持 shell 式扩展。 (看Debian 的指南关于这一点。)

这些文件可能已经包含一些分配,因此请遵循您在文件中看到的语法。

确保重新启动 shell 并重新登录用户以应用更改。

如果您需要添加系统范围的环境变量,现在有/etc/profile.d包含 sh 脚本来初始化变量的文件夹。
您可以将包含所有导出变量的 sh 脚本放置在此处。
但请注意,这不应该用作 Debian 上向 env 添加变量的标准方法。

答案2

要对所有用户/shell 执行 if 操作,具体取决于您可以使用/etc/environment或 的发行版/etc/profile。如果存在的话,创建一个新文件/etc/profile.d可能会更好,因为它不太可能与打包系统所做的更新发生冲突。

在 中/etc/environment,变量通常用 来设置name=value,例如:

ORACLE_HOME=/usr/lib/oracle/11.2/client64

在 中/etc/profile,您必须使用,export因为这是一个脚本,例如:

export ORACLE_HOME=/usr/lib/oracle/11.2/client64

对于 下的文件也是如此/etc/profile.d,还可能存在必须满足文件才能工作的命名限制。在 Debian 上,该文件必须具有扩展名.sh(尽管不需要 bang 行或可执行权限,因为它是来源的)。检查您的发行版文档或查看/etc/profile脚本以了解如何加载这些文件。

另请注意,虽然LD_LIBRARY_PATH永久设置可能是有问题的,包括存在安全风险。作为替代方案,我建议找到某种方法LD_LIBRARY_PATH在运行之前将 附加到每个需要它的程序的命令行开头。例如:

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib myprog

一种方法是使用包装脚本来运行程序。您可以将其命名为与您的程序相同的名称,然后将其放入/usr/local/bin或出现的任何位置你的程序的位置在PATH.这是一个示例脚本(不要忘记chmod +x该脚本):

#!/bin/sh
LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib /real/location/of/myprog "$@"

答案3

您没有指定您正在使用哪种类型的 UNIX。在 FreeBSD(以及 Net 和 Open BSD)上,您可以使用/etc/login.conf.完整详细信息在手册页但你可以添加类似的内容:

:setenv=ORACLE_HOME=/usr/lib/oracle/11.2/client64:

为默认类,它将为所有用户设置,无论 shell 或是否缺少 shell。

如果您使用 PAM,还有一些 PAM 模块可以执行类似的操作。例如pam_env其读取自/etc/environment.

答案4

我找到“如何永久保存这些变量?”模糊的。

所有答案似乎都假设它意味着“重新启动后”含义中的永久性。
我在这里偶然发现了一种为 bash 会话保留 ENV 的方法,以便生产应用程序可以在同一进程中设置 ENV 的情况下运行。

我将把这个答案留在这里,供志同道合的人参考。
解决方案是将它们放入脚本中,如下所示:

设置-envs.sh:

#!/bin/sh
export ENV1="some value"
export ENV1="some value"

chmod +x set-envs.sh一次使其可执行
并在应用程序之前运行它source(或者它的简写.

. ./set-envs.sh
./run-the-app.sh  # or such

相关内容