Tomcat起動スクリプトの出力がパイプ(grep)では機能しません。

Tomcat起動スクリプトの出力がパイプ(grep)では機能しません。

私は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_tty1かどうか混乱しています。もう1つの奇妙なことは、以前のバージョンの小さな浮気でも動作していたことです。実際にこのコミットで紹介されました。https://github.com/apache/tomcat/commit/bf894a0e6b5c8f92b122452645e93d63277ad3ab

-t 1このテストはパイプラインでの使用には適していないようです。代わりにそれを行う必要があります-t 0(これは「通常テストは標準入力で行われます」というABの説明に基づいています)。

おすすめ記事