私は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
...
パイプを使用すると、状況が奇妙に見え始めます。
catalina version | grep CATALINA_HOME
CATALINA_HOME
# here should be the missing "Using CATALINA_HOME..."
ベストアンサー1
まず、コメントを送ってくれた@Zeitounatorと@ABに感謝します!
さまざまなtomcatバージョンでテストしてもう少し詳しく調べたところ、実際にhave_tty
設定がゼロであることに問題があることがわかりました。パイプラインでCatalinaスクリプトを使用すると、if [ -t 1 ];
テストは失敗します。
catalina
通常セットの正しい使用がhave_tty
1かどうか混乱しています。もう1つの奇妙なことは、以前のバージョンの小さな浮気でも動作していたことです。実際にこのコミットで紹介されました。https://github.com/apache/tomcat/commit/bf894a0e6b5c8f92b122452645e93d63277ad3ab
-t 1
このテストはパイプラインでの使用には適していないようです。代わりにそれを行う必要があります-t 0
(これは「通常テストは標準入力で行われます」というABの説明に基づいています)。