如何永久设置环境变量


227

我的变量是

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

如何永久保存这些变量?


2
此页面上的其他答案都很好。一个小建议是/usr/lib/oracle/11.2/client64/lib/etc/ld.so.conf.d/路径下添加一个新文件。然后,您无需设置LD_LIBRARY_PATH,另请参见此处
Elliott Frisch 2014年

1
小心一点,这个故事比最初出现的更多。我邀请您检查我的答案。
jasonleonhard

Answers:


252

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

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

  1. 登录/非登录外壳
  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

sh

$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

sh

$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例如,/etc/csh.login对于类似Bourne的shell,对于(t)csh /etc/zsh/zprofile/etc/zsh/zshrczsh。

另一个选择是使用/etc/environment,它在Linux系统上由PAM模块读取,pam_env并且仅支持简单的分配,而不支持shell样式的扩展。(有关此信息,请参见Debian的指南。)

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

确保重新启动外壳程序并重新登录用户,以应用更改。

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


.profile/etc/但我不如何在其中设置变量,.profile请告诉我
user3021349

6
.profile不在您的主目录中/etc/
Kiwy 2014年

1
[Admin@localhost etc]$ cat ~/.profile cat: /home/Admin/.profile: No such file or directory [Admin@localhost etc]$
user3021349

4
@ user3021349我并不是无礼的,但是如果您认为需要一秒钟,您也可以使用您掌握的其他编辑器。:wq是写文件,并在六退出不要忘记键入命令esc之前
Kiwy

3
您需要考虑crontab脚本中的环境变量。crontab运行脚本时,不会在这些位置中查找任何位置。
yegle 2014年

71

要怎么做,如果为所有用户/壳,这取决于发行版,你可以使用/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(尽管它是源文件,但不需要爆炸行或可执行权限)。查看发行文档或查看/etc/profile脚本,以了解如何加载这些文件。

还要注意,尽管LD_LIBRARY_PATH永久设置可能会带来问题,包括安全隐患。作为替代方案,我建议LD_LIBRARY_PATH为在运行之前需要它的每个程序找到某种在命令行开头添加前缀的方法。例如:

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

一种方法是使用包装器脚本运行程序。您可以使用与程序相同的名称,然后将其放在程序中的位置之前/usr/local/bin或之后的任何位置。这是一个示例脚本(请不要忘记该脚本):PATHchmod +x

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

因此,如果我在environment文件中添加了值对,是什么导致这些值对加载?例如,退出vi编辑器(更改已成功写入)后,我希望编写echo $MY_NEW_VARIABLE并看到它打印出来-编辑:如果我启动新的命令外壳,我会看到它们在那里
bkwdesign 2016年

不确定这是个人问题还是其他原因,但是/etc/environment即使重新启动bash终端或键入,我也必须在设置此设置后重新启动操作系统source /etc/environment。因此,如果遇到环境变量无法永久保存的问题,请尝试重新启动。
Blairg23 '18

@bkwdesign @ Blairg23 /etc/environment不是脚本,因此无法获取。它是在登录时(以及少数其他系统事件)由PAM加载的,因此您可以注销/登录或在终端中运行新的登录会话,方法是$ su <your username here>在该隔离的会话中获取新值。一旦退出,这些值将消失,因此完全注销/登录可能不太容易出错。
AaronDanielson

2

当您安装oracle时,oracle要求您在单击ok之前运行一些脚本。该脚本.bash_profile在oracle用户主目录中放置了一个虚拟设置。要查看文件,ls -al将显示所有隐藏文件。

键入nano bash_profile以打开文件。对该文件进行更改以反映您的主机名和适当的sid名称。检查其他需要修改的设置。按Control x保存,然后在询问是否要保存时键入y。按返回键保存。重新启动计算机。以oracle用户身份登录。通过键入启动数据库

sqlplus / as sysdba

startup  

这与接受的答案有何不同?
roaima 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.