I'm completely puzzled by this behavior of Tomcat 9.0.21 startup script 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
Now when I run catalina version | grep CATALINA_HOME
I cannot see any result with the original script version.
In my modified version of script I can only see what's echo-ed before the 'if have_tty' section!
catalina | grep CATALINA
CATALINA_HOME
I'd expect to see also the next CATALINA_HOME echo-ed from within the if block as well as the "Using CATALINA_HOME ..." line.
What's going on there?
(If it matters I'm running Mac OS X 10.14.5 with iTerm and zsh as my shell)
UPDATE
People commented that it's because the have_tty
variable isn't set but that's not a problem in my case.
When I just run catalina version
I get the full output:
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
...
It's just with the pipe (grep) that things start looking weird:
catalina version | grep CATALINA_HOME
CATALINA_HOME
# here should be the missing "Using CATALINA_HOME..."
test -t 1; echo $?
versus(test -t 1; echo $? ) | cat
. Usually the test is done on stdin (eg the tty command), but here it's done on stdouttest -t 1; echo $?
returns 0.catalina
script in the pipe makes theif [ -t 1 ];
fail andhave_tty
is set to zero in that case. I was puzzled because using plaincatalina
setshave_tty
properly to 1. Still not sure if that's a standard behavior or not.