还有其他方法来定义环境变量吗?

还有其他方法来定义环境变量吗?

我对 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 ']'
...
...

相关内容