
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/bin
catalina.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
。
親シェルに影響を与えるためにこれらの値が必要な場合は、次のものが必要です。
- 源泉
catalina.sh
それを実行する代わりに、または - 源泉
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