Самый простой подход - использовать переменную и установить для нее значение 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
Вам нужно либо выполнить 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
В качестве альтернативы ответу Лукаса (который содержит наиболее вероятное объяснение ваших проблем) вы можете использовать следующее (при условии, что скрипт выполняется с помощью bash):
#!/bin/bash
CURDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
if [ -f ${CURDIR}/envvars/tomcat.env ]; then
. ${CURDIR}/envvars/tomcat.env
fi
Я не уверен на 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
.
Если вам нужно, чтобы эти значения влияли на родительскую оболочку, вам нужно либо:
catalina.sh
, а не выполнение, или setenv.sh
/ tomcat.env
прямо из вашей интерактивной оболочки.