无法获取源文件

无法获取源文件

我有一个场景,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脚本的 shell 中。因此自定义配置尚未设置。

知道为什么会发生这种情况吗?还是我对来源的理解不正确?

文件夹结构

--bin (contains)
-------- catalina.sh
-------- setenv.sh
-------- envvars (contains)
-------------------- tomcat.env

该脚本是从交互式父脚本执行的,该父脚本又调用catalina.sh,并且在catalina.sh中获取了setenv.sh,该脚本在内部获取了tomcat.env。

答案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 脚本的 shell 中。

但如果你期望父母交互式外壳您正在执行的catalina.sh变量将来源到该变量家长shell,那么我大胆猜测是的,你的“对来源的理解不正确”。

当您执行类似 的 shell 脚本时catalina.sh,并且在源文件中catalina.sh获取另一个文件时,该源文件中设置的变量(等)将影响catalina.sh脚本中的环境,但这不会影响您所在的父 shell 的环境。已经执行了catalina.sh

如果您需要这些值来影响父 shell,则需要:

  1. 来源 catalina.sh而不是执行它,或者
  2. 来源 setenv.sh/tomcat.env直接从交互式 shell 中。

答案3

或者可以选择卢卡斯的回答(其中包含对您的麻烦最可能的解释)您可以使用以下命令(假设脚本是使用 bash 执行的):

#!/bin/bash

CURDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

if [ -f ${CURDIR}/envvars/tomcat.env ]; then
   . ${CURDIR}/envvars/tomcat.env
fi

相关内容