저는 Tomcat 9.0.21 시작 스크립트 catalina.sh의 다음 동작 때문에 완전히 혼란스러워졌습니다.
# following line added by me
echo "CATALINA_HOME"
# following line added by me
echo $have_tty
if [ $have_tty -eq 1 ]; then
# following line added by me
echo "CATALINA_HOME"
echo "Using CATALINA_BASE: $CATALINA_BASE"
echo "Using CATALINA_HOME: $CATALINA_HOME"
echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"
if [ "$1" = "debug" ] ; then
echo "Using JAVA_HOME: $JAVA_HOME"
else
echo "Using JRE_HOME: $JRE_HOME"
fi
echo "Using CLASSPATH: $CLASSPATH"
if [ ! -z "$CATALINA_PID" ]; then
echo "Using CATALINA_PID: $CATALINA_PID"
fi
fi
이제 실행하면 catalina version | grep CATALINA_HOME
원본 스크립트 버전의 결과가 표시되지 않습니다. 내 수정된 버전의 스크립트에서"if have_tty" 부분 이전에 에코된 내용만 볼 수 있습니다!
catalina | grep CATALINA
CATALINA_HOME
또한 if 블록과 "CATALINA_HOME ... 사용" 줄 내부에서 다음 CATALINA_HOME 에코를 보고 싶습니다.
거기서 무슨 일이 일어 났어?
(중요하다면 Mac OS X 10.14.5를 실행하고 iTerm과 zsh를 셸로 사용하고 있습니다)
고쳐 쓰다
have_tty
사람들은 이것이 변수가 설정되지 않았기 때문이라고 말했지만 그것은 나에게 문제가 되지 않습니다. 이것을 실행하면 catalina version
전체 출력이 표시됩니다.
CATALINA_HOME
1
CATALINA_HOME
Using CATALINA_BASE: /usr/local/Cellar/tomcat/9.0.21/libexec
Using CATALINA_HOME: /usr/local/Cellar/tomcat/9.0.21/libexec
Using CATALINA_TMPDIR: /usr/local/Cellar/tomcat/9.0.21/libexec/temp
Using JRE_HOME: /Users/jumar/.jenv/versions/1.8.0.171
Using CLASSPATH: /usr/local/Cellar/tomcat/9.0.21/libexec/bin/bootstrap.jar:/usr/local/Cellar/tomcat/9.0.21/libexec/bin/tomcat-juli.jar
Server version: Apache Tomcat/9.0.21
...
파이프(grep)를 사용하면 상황이 이상해 보이기 시작합니다.
catalina version | grep CATALINA_HOME
CATALINA_HOME
# here should be the missing "Using CATALINA_HOME..."
답변1
먼저 의견을 보내주신 @Zeitounator와 @AB에게 감사드립니다!
다양한 tomcat 버전으로 테스트하고 조금 더 자세히 조사한 결과 실제로 have_tty
설정이 0인 데 문제가 있다는 것을 발견했습니다. 파이프라인에서 Catalina 스크립트를 사용하면 if [ -t 1 ];
테스트가 실패합니다.
catalina
일반 세트 의 올바른 사용이 have_tty
1인지 혼란 스럽습니다. 더 이상한 점은 이전 버전의 작은 바람둥이와도 작동했다는 것입니다. 실제로 이 커밋에서 소개되었습니다.https://github.com/apache/tomcat/commit/bf894a0e6b5c8f92b122452645e93d63277ad3ab
-t 1
이 테스트는 파이프라인에서 사용하기엔 부적합한 것 같습니다 . 대신에 그렇게 해야 합니다 -t 0
(이는 "보통 테스트는 표준 입력에서 수행됩니다"라는 AB의 설명을 기반으로 합니다).
답변2
| grep CATALINA
다음 줄에서 출력이 나오지 않으면 테스트 명령에서 제거하세요 .
echo $have_tty
그러면 $have_tty가 설정되지 않아 실행이 if 블록에 들어가지 않게 됩니다. $have_tty가 원래 설정된 위치를 추적해야 합니다.
Catalina가 사용하는 것 같습니다.이 명령tty가 있는지 확인합니다.
$ tty
/dev/ttys011
tty를 얻으려면 스크립트가 tty가 아닌 프로세스(예: init 프로세스)를 통하지 않고 명령줄에서 실행되는지 확인하세요.