Tomcat - setenv.sh 如何工作?

Tomcat - setenv.sh 如何工作?

我认为我的问题以前没有被问过(无论如何也不完全是这样,如果有的话,抱歉)。我在 CentOS 7 上使用 Tomcat 7。

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

export TEST="test"

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

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

echo $TEST

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

答案1

不。startup.sh运行在与您启动它的进程不同的进程中。具体来说,当启动 shell 脚本时,它会在新创建的子外壳当前外壳的。虽然子 shell(以及所有其他进程)在初始化期间确实继承了父进程的环境,但此后,无论哪个方向都不会传播更改。因此,当1startup.sh发生时,环境更改在命令行中不可见。. setenv.sh

如果你仔细想想,你真的不希望事情朝相反的方向发展。你的工作外壳,一旦你重新控制它,就会被谁知道什么样的环境变化所“污染”。例如,Tomcat 脚本可能会$PATH在此过程中彻底改变并破坏许多事情。

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

答案2

startup.sh脚本可能会获取setenv.sh文件来获取变量的值,但如果这样做,则该变量将仅在脚本的环境中设置startup.sh,而不是在交互式 shell 中设置。

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

如果是bash,请运行它

$ bash -x tomcat/bin/startup.sh

(即添加-x到命令行)

将选项添加-x到 shell 的调用中将打开脚本的跟踪。

相关内容