Tomcat - setenv.sh 如何工作?

Roo*_*kie 5 centos environment-variables tomcat

我认为之前没有人问过我的问题(无论如何都没有问过,如果有,抱歉)。我在 CentOS 7 上使用 Tomcat 7。

在我的 tomcat/bin/setenv.sh 文件中,我设置了:

export TEST="test"
Run Code Online (Sandbox Code Playgroud)

然后我通过运行 tomcat/bin/startup.sh 通过终端启动 tomcat

然后我运行(不是在脚本中,而是在执行 Tomcat 启动脚本后在终端中运行):

echo $TEST
Run Code Online (Sandbox Code Playgroud)

我的问题:我应该能够“回显”变量 TEST 吗?我是否应该能够看到 TEST 变量已设置为我想要的(测试)?

B L*_*yer 5

startup.sh,在与您启动它的进程不同的进程中运行。启动脚本时,它会在当前 shell的新子 shell中运行。虽然子shell在初始化期间确实继承了其父级的环境,但在那之后,任何方向的变化都没有传播。因此,什么startup.sh时候. setenv.sh1环境更改在您的命令行中不可见。

如果您改为运行,. startup.sh那么事情会有所不同,因为一切都将在同一个 shell 中发生。但这对您的 Tomcat 启动来说并不健康!

1实际上startup.sh调用catalina.sh然后它是源setenv.sh(至少在 Tomcat 7.x 中),但为了简单起见,我忽略了这个事实,因为它不会改变结果。


Kus*_*nda 5

不。

startup.sh脚本可以被采购的setenv.sh文件,以获取变量的值,但如果这样做,该变量将只在环境中设置startup.sh的脚本,而不是在你交互shell。

如果您想查看运行时发生的情况,请startup.sh首先确定它使用的 shell 解释器(请参阅#!文件顶部的-line)。

如果是bash,运行它

$ bash -x tomcat/bin/startup.sh
Run Code Online (Sandbox Code Playgroud)

(即添加-x到命令行)

这将打开脚本跟踪。