$PATH 변수의 특정 부분이 어디에 설정되어 있는지 확인할 수 있는 방법이 있는지 궁금합니다.
약 1년 반 전에 제가 수강하고 있던 강좌를 위해 제 컴퓨터에 Oracle XE 11.2.0을 설치하는 지루한 과정을 겪었습니다. 어딘가에서 작업을 수행하기 위해 $PATH 변수에 "/u01/app/oracle/product/11.2.0/xe/bin" 경로를 추가했습니다. 이제 Oracle DB 특정 루트 /u01/ 폴더를 삭제했기 때문에 bash는 시작 시 파일이나 디렉터리가 존재하지 않는다는 오류를 발생시킵니다. 그래서 찾을 수 있는 모든 파일을 수동으로 살펴봤지만 아무것도 찾지 못했습니다.
/etc/login.defs
내가 아는 한 $PATH의 해당 부분은 , ~/.profile
, /etc/environment
, /etc/profile
또는 파일에 설정되어 있지 않습니다 ~/.bash_login
.~/.bash_profile
~/.bashrc
cat ~/.bashrc | grep "*oracle*"
먼저 위에 나열된 각 파일을 실행하여 이를 확인하십시오. 심지어 미친 짓을 해서 sudo strings /dev/sdb -n 11 | grep -C100 "/u01/app/oracle/*"
해당 문자열이 포함된 모든 파일의 목록을 실행하기도 했습니다. 많은 결과를 얻었지만 특별히 가치 있는 결과는 없었습니다. 내 불쌍한 SSD는 그럴 자격이 없습니다.
그래서 제안이 있나요? $PATH의 해당 부분이 어디에 연결되어 있는지 어떻게 알 수 있나요? 확인해야 할 다른 일반적인 파일이 있습니까? 범위를 좁힐 수 있다면 Linux Mint 18.3에서 실행하고 있습니다.
답변1
셸 초기화를 디버깅하는 한 가지 방법은 로그인 대화형 셸( )을 실행 -li
하고 모든 명령이 실행될 때 인쇄하도록 지시하고 출력에서 원하는 내용을 찾는 것입니다.
PS4=' $BASH_SOURCE:$LINENO: ' bash -lixc true |& grep oracle
PS4
이는 bash에서 옵션의 추가 정보를 인쇄하는 데 사용되며 -x
, 로 설정되면 $BASH_SOURCE:$LINENO
가져오는 파일의 경로와 실행 중인 줄 번호를 인쇄합니다. 다음을 실행하면 -c true |& grep oracle
단일 셸의 초기화를 빠르게 필터링할 수 있습니다. 선행 공백을 사용하면 bash는 중첩된 소싱이 발생할 때 줄이 나타나도록 합니다.
답변2
노력하다
grep -lr /u01/app/oracle/product/11.2.0/xe/bin /etc/*
여기에는 /etc/
경로 요소가 포함된 파일이 나열됩니다. 말씀하신 것처럼 질문에 나열한 파일에 없으면 아래에 있어야 합니다 /etc/
. 내 추측은 /etc/profile.d/
.
업데이트 1
bash를 사용한다고 가정하면 어떤 명령이 실행되었는지 확인해 볼 수 bash -v
있습니다 bash -x
. bash -v
원본 소스를 덤프하고, bash -x
확장 변수를 사용하여 실제로 실행된 명령을 덤프합니다. 이러한 플래그는 결합될 수 있지만 가독성이 크게 저하됩니다. :)
답변3
문자열을 확인할 수도 있습니다 oraenv
.
Oracle 데이터베이스 설치 프로그램은 일반적으로 /usr/local/bin/oraenv
Oracle 데이터베이스 엔진에 필요한 모든 환경 변수를 설정하고 /usr/local/bin/coraenv
설정을 해제하는 한 쌍의 스크립트를 생성합니다. 이러한 스크립트의 목적은 현재 세션의 환경 변수를 조작하는 것이므로 "소스화"해야 합니다. 그렇지 않으면 원하는 효과를 얻지 못할 것입니다.
oraenv
로그인 스크립트에 다음과 같은 내용을 포함했을 수 있습니다 .
ORACLE_SID=<database SID here>
ORAENV_ASK=NO
. oraenv
마지막 줄은 source oraenv
.