환경 변수를 정의하는 다른 방법이 있습니까?

환경 변수를 정의하는 다른 방법이 있습니까?

저는 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_profileetc. )이 없으므로 .profile이 값은 어디에서 왔습니까?

환경 변수의 오버로드 순서는 무엇입니까?

답변1

무엇을 설정하든 결국 환경 변수가 승리합니다. 따라서 문제가 되지 않습니다. $HOME/.bashrcOracle 사용자 파일의 변수를 아래쪽으로 설정했습니다.

이 파일 $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 ']'
...
...

관련 정보