如何永久设置环境变量

use*_*349 290 environment-variables

我的变量是

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
ORACLE_HOME=/usr/lib/oracle/11.2/client64
Run Code Online (Sandbox Code Playgroud)

如何永久保存这些变量?

Kiw*_*iwy 315

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

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

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

猛击

  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
Run Code Online (Sandbox Code Playgroud)

zsh

$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
Run Code Online (Sandbox Code Playgroud)

克什

$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
Run Code Online (Sandbox Code Playgroud)

伯恩

$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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

如果你想让它对所有用户永久有效,你可以在 下编辑相应的文件/etc/,即/etc/profile对于类似 Bourne 的 shell、/etc/csh.login对于 (t)csh/etc/zsh/zprofile/etc/zsh/zshrc对于 zsh。

另一种选择是使用/etc/environment,它在 Linux 系统上由 PAM 模块读取,pam_env并且只支持简单的赋值,不支持 shell 风格的扩展。(请参阅Debian 的指南。)

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

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

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

  • `.profile` 位于您的主目录中,而不是 `/etc/` (7认同)
  • @user3021349 我并不是要粗鲁,但如果您想一秒钟,您也可以使用您掌握的其他编辑器。`:wq` 是写文件并退出 vi 的命令 不要忘记输入 `esc` (5认同)
  • 您需要考虑 `crontab` 脚本中的环境变量。当 `crontab` 脚本运行时,这些位置都不会被查找。 (4认同)

Gra*_*eme 87

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

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

ORACLE_HOME=/usr/lib/oracle/11.2/client64
Run Code Online (Sandbox Code Playgroud)

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

export ORACLE_HOME=/usr/lib/oracle/11.2/client64
Run Code Online (Sandbox Code Playgroud)

下的文件/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
Run Code Online (Sandbox Code Playgroud)

一种方法是使用包装脚本来运行程序。你可以这样把同一个名字作为你的程序,并把它/usr/local/bin或任何地方出现前,你在程序的位置PATH。这是一个示例脚本(不要忘记chmod +x脚本):

#!/bin/sh
LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib /real/location/of/myprog "$@"
Run Code Online (Sandbox Code Playgroud)