저는 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
etc. )이 없으므로 .profile
이 값은 어디에서 왔습니까?
환경 변수의 오버로드 순서는 무엇입니까?
답변1
무엇을 설정하든 결국 환경 변수가 승리합니다. 따라서 문제가 되지 않습니다. $HOME/.bashrc
Oracle 사용자 파일의 변수를 아래쪽으로 설정했습니다.
이 파일 $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 ']'
...
...