我的变量是

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


如何永久保存这些变量?

评论

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

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

#1 楼

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

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


登录/非登录外壳
交互式/非交互式外壳

bash


作为另存为登录shell将按顺序加载/etc/profile~/.bash_profile~/.bash_login~/.profile
因为非登录交互式shell会加载~/.bashrc

由于非登录非交互式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


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


ksh

$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


bourne

$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/下编辑相应的文件,例如,对于像Bourne一样的外壳,请使用/etc/profile,对于(t)csh,请使用/etc/csh.login,对于/etc/zsh/zprofile

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

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

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

如果需要添加系统范围的环境变量,现在有pam_env文件夹,其中包含用于初始化变量的sh脚本。
您可以放置sh脚本,其中包含所有您导出的变量。
请谨慎,尽管这不应该用作在Debian上向env添加变量的标准方法。

评论


/ etc /中的此.profile,但是我不知道如何在此.profile中设置变量,请告诉我

–user3021349
2014年2月28日在13:44

.profile在您的主目录中而不是/ etc /

–奇威
2014年2月28日在13:45

[Admin @ localhost等] $ cat〜/ .profile cat:/home/Admin/.profile:无此类文件或目录[Admin @ localhost等] $

–user3021349
14年2月28日在13:49

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

–奇威
14年2月28日在13:59

您需要在crontab脚本中考虑环境变量。运行crontab脚本时,不会查找这些位置。

– yegle
2014年3月1日在1:04

#2 楼

要针对所有用户/外壳,根据发行版,您可以使用/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/binPATH中程序位置之前出现的任何位置。这是一个示例脚本(请不要忘记对脚本进行chmod +x):

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


评论


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

– bkwdesign
16 Jan 22'在0:28



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

– Blairg23
18年1月11日在1:04

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

– AaronDanielson
18年2月12日在18:33

#3 楼

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

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

sqlplus / as sysdba

startup  

启动数据库

评论


这与接受的答案有何不同?

–roaima
15年9月3日,13:10

#4 楼

您没有指定所使用的UNIX风格。在FreeBSD(以及Net和Open BSD)上,您可以使用/etc/login.conf。手册页中的全部详细信息,但您可以在默认类中添加以下内容:
:setenv=ORACLE_HOME=/usr/lib/oracle/11.2/client64:

,它将为所有用户设置,无论是否安装了shell。
还有PAM模块。如果您使用的是PAM,则可以执行类似的操作。例如从/etc/environment读取的pam_env。