ソースファイルをインポートできません。

ソースファイルをインポートできません。

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/bincatalina.sh

または、フルパスにファイルをインポートするようにスクリプトを編集しますsetenv.shtomcat.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

親シェルに影響を与えるためにこれらの値が必要な場合は、次のものが必要です。

  1. 源泉 catalina.shそれを実行する代わりに、または
  2. 源泉 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

関連情報