소스 파일을 가져올 수 없습니다.

소스 파일을 가져올 수 없습니다.

Tomcat 사용자 정의 구성이 tomcat.env.

우리가 catalina.sh얻는 값은 다음과 같습니다.

. "$CATALINA_BASE/bin/setenv.sh"

하지만 구성이 다른 파일에 존재하기 때문에 다음을 추가해 보았습니다.

#!/bin/sh

if [ -f ./envvars/tomcat.env ]; then
   . ./envvars/tomcat.env
fi

그러나 파일의 값은 스크립트를 실행하는 셸로 tomcat.env가져오지 않습니다 . catalina.sh따라서 사용자 정의 구성이 아직 설정되지 않았습니다.

왜 이런 일이 발생하는지 아시나요? 아니면 제가 소스를 잘못 이해하고 있는 걸까요?

폴더 구조

--bin (contains)
-------- catalina.sh
-------- setenv.sh
-------- envvars (contains)
-------------------- tomcat.env

스크립트는 catalina.sh를 호출하는 대화형 상위 스크립트에서 실행되며, catalina.sh 내에서는 내부적으로 tomcat.env를 가져오는 setenv.sh를 가져옵니다.

답변1

상대 경로로 존재하는 디렉터리에서 실행해야 합니다 catalina.sh. 내 생각에 이것은 위의 예제를 실행하기 전에 이 작업을 수행 ./envvars/tomcat.env해야 한다는 것을 의미한다고 생각합니다 . 그러나 이것은 당신이 원하는 것이 아닐 수도 있습니다.cd$CATALINA_BASE/bincatalina.sh

또는 전체 경로로 파일을 가져오도록 스크립트를 편집하십시오 setenv.sh.tomcat.env

#!/bin/sh

if [ -f "$CATALINA_BASE/bin/envvars/tomcat.env" ]; then
   . "$CATALINA_BASE/bin/envvars/tomcat.env"
fi

답변2

무슨 뜻인지 100% 확신할 수 없습니다.

그러나 tomcat.env 파일의 값은 catalina.sh 스크립트를 실행하는 셸로 가져오지 않습니다.

하지만 부모님을 기대한다면대화형 쉘실행 중인 변수는 catalina.sh이 변수의 소스가 됩니다.부모쉘, 그렇다면 나는 "소스에 대한 이해가 잘못되었습니다"라고 추측하고 싶습니다.

유사한 쉘 스크립트를 실행하고 catalina.sh소스 파일 내에서 다른 파일을 얻으면 catalina.sh해당 소스 파일에 설정된 변수 등이 catalina.sh스크립트의 환경에 영향을 주지만 상위 쉘의 환경에는 영향을 미치지 않습니다. 안에. 이미 실행되었습니다 catalina.sh.

상위 셸에 영향을 미치기 위해 이러한 값이 필요한 경우 다음이 필요합니다.

  1. 원천 catalina.sh그것을 실행하는 대신, 또는
  2. 원천 setenv.sh/ tomcat.env대화형 쉘에서 직접.

답변3

아니면 선택할 수 있습니다루카스의 대답(문제에 대한 가장 가능성 있는 설명이 포함되어 있음) 다음 명령을 사용할 수 있습니다(스크립트가 bash를 사용하여 실행된다고 가정).

#!/bin/bash

CURDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

if [ -f ${CURDIR}/envvars/tomcat.env ]; then
   . ${CURDIR}/envvars/tomcat.env
fi

관련 정보