Невозможно получить исходный файл

Самый простой подход - использовать переменную и установить для нее значение 1 при первом обнаружении ПРИМЕЧАНИЯ . Затем скажите вашему сценарию добавлять новую запись только в том случае, если переменная не равна 1 . Например:

awk -vRS= -vORS='\n\n' '
  BEGIN{z="whitelist.0=SAMPLE";FS="\n"}
  /NOTES/ && flag!=1{
    if (/[0-9]=/){
      split($NF, a, /[.=]/);
      sub(/0/, a[2]+1, z);
      flag=1;
    }
    sub (/$/,"\n"z ,$0)
  };1' infile
1
31.03.2016, 13:24
3 ответа

Вам нужно либо выполнить 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
29.04.2021, 00:16

В качестве альтернативы ответу Лукаса (который содержит наиболее вероятное объяснение ваших проблем) вы можете использовать следующее (при условии, что скрипт выполняется с помощью bash):

#!/bin/bash

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

if [ -f ${CURDIR}/envvars/tomcat.env ]; then
   . ${CURDIR}/envvars/tomcat.env
fi
0
29.04.2021, 00:16

Я не уверен на 100%, что вы имеете в виду:

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

Но если вы ожидаете, что родительская интерактивная оболочка , из которой вы выполняете catalina.sh, будет иметь источник переменной в этой родительской оболочке, то я рискну предположить, что да, ваше "понимание источника неверно".

Когда вы выполняете сценарий оболочки, такой как catalina.sh, и внутри catalina.shвы используете другой файл, переменные (и т. д.), установленный в этом исходном файле, повлияет на среду в скрипте catalina.sh, но не повлияет на среду родительской оболочки, из которой вы выполнили catalina.sh.

Если вам нужно, чтобы эти значения влияли на родительскую оболочку, вам нужно либо:

  1. Источник catalina.sh, а не выполнение, или
  2. Источникsetenv.sh/ tomcat.envпрямо из вашей интерактивной оболочки.
0
29.04.2021, 00:16

Теги

Похожие вопросы