Tomcat - setenv.sh는 어떻게 작동하나요?

Tomcat - setenv.sh는 어떻게 작동하나요?

내 질문이 이전에 요청된 적이 없는 것 같습니다(어쨌든 전적으로 사실이 아니라면 죄송합니다). CentOS 7에서 Tomcat 7을 사용하고 있습니다.

내 tomcat/bin/setenv.sh 파일에서 다음을 설정했습니다.

export TEST="test"

그런 다음 터미널을 통해 tomcat/bin/startup.sh를 실행하여 tomcat을 시작했습니다.

그런 다음 스크립트를 실행하지 않고 Tomcat 시작 스크립트를 실행한 후 터미널에서 실행합니다.

echo $TEST

내 질문:변수 TEST를 "에코"할 수 있어야 합니까? TEST 변수가 내가 원하는 값으로 설정(테스트)된 것을 볼 수 있어야 할까요?

답변1

아니요. startup.sh시작한 프로세스와 다른 프로세스에서 실행됩니다. 구체적으로 쉘 스크립트가 시작되면 새로 생성된 스크립트에서 실행됩니다.서브쉘현재 쉘의 하위 셸(및 기타 모든 프로세스)은 초기화 중에 상위 프로세스의 환경을 상속하지만 그 이후에는 변경 사항이 어느 방향으로도 전파되지 않습니다. 따라서 1이startup.sh 발생하면 환경 변경 사항이 명령줄에 표시되지 않습니다.. setenv.sh

생각해 보면 일이 다른 방향으로 진행되는 것을 정말로 원하지 않습니다. 작업 중인 쉘은 일단 제어권을 되찾으면 어떤 종류의 환경 변화가 일어나는지 아는 사람에 의해 "오염"될 것입니다. 예를 들어 Tomcat 스크립트는 $PATH프로세스에서 많은 것을 완전히 변경하고 중단할 수 있습니다.

1은 실제로 startup.sh호출 catalina.sh한 다음 소스를 가져옵니다 setenv.sh(적어도 Tomcat 7.x에서는). 그러나 단순화를 위해 결과가 변경되지 않으므로 이를 무시합니다.

답변2

스크립트 는 변수 값을 얻기 위해 파일을 startup.sh가져올 수 있지만 setenv.sh, 그렇게 하면 변수는 startup.sh대화형 셸이 아닌 스크립트 환경에서만 설정됩니다.

실행 시 어떤 일이 발생하는지 확인하려면 startup.sh먼저 어떤 쉘 해석기를 사용하고 있는지 확인하세요( #!파일 상단의 - 줄 참조).

그렇다면 bash실행하십시오.

$ bash -x tomcat/bin/startup.sh

(즉, -x명령줄에 추가됨)

-x셸 호출에 옵션을 추가하면 스크립트 추적이 활성화됩니다.

관련 정보