![如何永久设置环境变量](https://linux22.com/image/148692/%E5%A6%82%E4%BD%95%E6%B0%B8%E4%B9%85%E8%AE%BE%E7%BD%AE%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.png)
我的变量是
LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
ORACLE_HOME=/usr/lib/oracle/11.2/client64
如何永久保存这些变量?
答案1
您可以将其添加到该文件.profile
或您的登录 shell 配置文件(位于您的主目录中)。
要“永久”更改环境变量,您至少需要考虑以下情况:
- 登录/非登录 shell
- 交互式/非交互式 shell
巴什
- Bash 作为登录 shell 将按顺序加载
/etc/profile
,~/.bash_profile
,~/.bash_login
,~/.profile
- Bash 作为非登录交互式 shell 将加载
~/.bashrc
- 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/zshrc
zsh。
另一种选择是使用/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
答案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