![还有其他方法来定义环境变量吗?](https://linux22.com/image/32183/%E8%BF%98%E6%9C%89%E5%85%B6%E4%BB%96%E6%96%B9%E6%B3%95%E6%9D%A5%E5%AE%9A%E4%B9%89%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E5%90%97%EF%BC%9F.png)
我对 Linux 还很陌生。 Debian Wheezy 现在正在我的笔记本电脑(64 位)上运行。
ORACLE_SID
我最近安装了Oracle 11g R2数据库用于评估目的,并通过脚本定义了环境变量(如) /etc/profile.d/oracle.sh
。这工作得很好,但对于“oracle”用户来说。
我通过 更改用户su - oracle
。 D
的值ORACLE_SI
与文件中指定的值不同/etc/profile.d/oracle.sh
。由于oracle用户的主目录下没有文件(如.bash_profile
等.profile
),那么这个值从哪里来呢?
环境变量的重载顺序是什么?
答案1
无论设置什么,环境变量最后都会获胜。所以这并不重要,我只需将 oracle 用户$HOME/.bashrc
文件中的变量设置为底部即可。
该文件$HOME/.bashrc
是关键文件,其源文件为/etc/bashrc
和 下的文件/etc/profile.d/*.sh
。所以我就ORACLE_SID=whatever
设置$HOME/.bashrc
。
调试技巧
如果您想查看发生了什么,可以像这样调试您的登录:
su - oracle -c "env SHELLOPTS=xtrace bash"
使用上面的命令,您可以按照以下步骤操作,因为不同的文件是由 bash 获取的:
...
...
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/less.sh ']'
++ '[' '[\u@\h \W]\$ ' ']'
++ . /etc/profile.d/less.sh
+++ '[' -x /usr/bin/lesspipe.sh ']'
+++ export 'LESSOPEN=||/usr/bin/lesspipe.sh %s'
+++ LESSOPEN='||/usr/bin/lesspipe.sh %s'
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/PackageKit.sh ']'
++ '[' '[\u@\h \W]\$ ' ']'
++ . /etc/profile.d/PackageKit.sh
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/qt.sh ']'
++ '[' '[\u@\h \W]\$ ' ']'
++ . /etc/profile.d/qt.sh
+++ '[' -z /usr/lib64/qt-3.3 ']'
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/udisks-bash-completion.sh ']'
++ '[' '[\u@\h \W]\$ ' ']'
++ . /etc/profile.d/udisks-bash-completion.sh
+++ '[' -z '4.1.7(1)-release' ']'
+++ complete -o filenames -F __udisks udisks
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/vim.sh ']'
++ '[' '[\u@\h \W]\$ ' ']'
++ . /etc/profile.d/vim.sh
+++ '[' -n '4.1.7(1)-release' -o -n '' -o -n '' ']'
+++ '[' -x //usr/bin/id ']'
++++ //usr/bin/id -u
+++ '[' 0 -le 200 ']'
+++ return
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/which2.sh ']'
...
...