私の質問は以前に要求されたことがないようです(とにかく完全に本当ではない場合は申し訳ありません)。 CentOS 7でTomcat 7を使用しています。
私はtomcat/bin/setenv.shファイルで次のように設定しました。
export TEST="test"
その後、端末を介してtomcat/bin/startup.shを実行してtomcatを起動しました。
その後、スクリプトを実行せずにTomcat起動スクリプトを実行し、端末で実行します。
echo $TEST
私の質問:変数TESTを「エコー」できるはずですか? TEST変数が私が望む値に設定(テスト)されていることを見ることができるはずですか?
答え1
いいえ。startup.sh
起動したプロセスとは異なるプロセスで実行されます。具体的には、シェルスクリプトが起動すると、新しく作成されたスクリプトで実行されます。サブシェル現在、シェルのサブシェル(および他のすべてのプロセス)は初期化中に親プロセスの環境を継承しますが、それ以降は変更はどの方向にも伝播されません。したがって、1がstartup.sh
発生すると、環境の変更はコマンドラインに表示されません。. setenv.sh
考えてみると、物事が別の方向に進むことを本当に望んでいません。作業中のシェルは、いったんコントロールを取り戻すと、どのような環境変化が起こるのかを知っている人によって「汚染」されます。たとえば、Tomcatスクリプトは$PATH
プロセス内の多くを完全に変更および中止できます。
1は実際にstartup.sh
呼び出してcatalina.sh
からソースを取得しますsetenv.sh
(少なくともTomcat 7.xでは)。ただし、単純化のために結果は変更されないため、これを無視します。
答え2
スクリプトは変数の値を取得するためにファイルをstartup.sh
インポートできますsetenv.sh
が、そうすると、変数はstartup.sh
対話型シェルではなくスクリプト環境でのみ設定されます。
実行時に何が起こるかを確認するには、startup.sh
まずどのシェルソルバーを使用しているかを確認してください(#!
ファイルの上部にある - 行を参照)。
その場合はbash
実行してください。
$ bash -x tomcat/bin/startup.sh
(つまり、-x
コマンドラインに追加)
-x
シェル呼び出しにオプションを追加すると、スクリプトトレースが有効になります。