Não é possível criar o arquivo de origem

1

Eu tenho um cenário em que uma configuração definida pelo usuário do tomcat é armazenada em um arquivo chamado tomcat.env .

Em catalina.sh , estamos obtendo os valores conforme abaixo:

. "$CATALINA_BASE/bin/setenv.sh"

Mas como a configuração está presente em um arquivo diferente, tentei adicionar:

#!/bin/sh

if [ -f ./envvars/tomcat.env ]; then
   . ./envvars/tomcat.env
fi

Mas os valores do arquivo tomcat.env não são originados no shell executando o script catalina.sh . Portanto, as configurações personalizadas não estão sendo definidas.

Alguma idéia do porquê isso está acontecendo? ou a minha compreensão da fonte não está certa?

estrutura de pastas

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

o script é executado a partir de um script pai interativo que inturn invoca catalina.sh e dentro de catalina.sh setenv.sh é originado que internamente origina tomcat.env.

    
por praveen 31.03.2016 / 10:30

3 respostas

2

Você precisa executar catalina.sh de um diretório em que ./envvars/tomcat.env exista como um caminho relativo. Acho que isso significaria que você precisa cd to $CATALINA_BASE/bin antes de executar catalina.sh no exemplo acima. Mas isso provavelmente não é o que você quer.

Como alternativa, edite o script setenv.sh para originar o arquivo tomcat.env por seu caminho completo:

#!/bin/sh

if [ -f "$CATALINA_BASE/bin/envvars/tomcat.env" ]; then
   . "$CATALINA_BASE/bin/envvars/tomcat.env"
fi
    
por 31.03.2016 / 12:34
0

Não tenho 100% de certeza sobre o seu significado aqui:

But the values from the tomcat.env file do not get sourced into the shell running the catalina.sh script.

Mas se você está esperando que o shell interativo pai do qual você está executando catalina.sh terá a variável originada no shell parent , então eu me arriscaria a acho que sim, o seu "entendimento da fonte não está certo".

Quando você executa um script de shell como catalina.sh e dentro de catalina.sh você origina outro arquivo, as variáveis (etc.) definidas dentro desse arquivo de origem afetarão o ambiente dentro do script catalina.sh , mas isso ganhou. t afeta o ambiente do shell pai a partir do qual você executou catalina.sh .

Se você precisar que esses valores afetem o shell pai, será necessário:

  1. Origem catalina.sh em vez de executá-lo ou
  2. Origem setenv.sh / tomcat.env diretamente do seu shell interativo.
por 31.03.2016 / 11:05
0

Alternativamente à resposta do Lucas (que contém a explicação mais provável para seus problemas), você pode usar o seguinte (assumindo que o script é executado com o bash):

#!/bin/bash

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

if [ -f ${CURDIR}/envvars/tomcat.env ]; then
   . ${CURDIR}/envvars/tomcat.env
fi
    
por 31.03.2016 / 13:55