Считать значение, используя ключ из XML-файла в сценарии оболочки - PullRequest
0 голосов
/ 13 июня 2019

Мне нужно прочитать переменные окружения из файла app.config с помощью сценария оболочки и установить их в файле constant.cs.

Вот ссылка, по которой я следую:

https://github.com/microsoft/appcenter/blob/master/sample-build-scripts/xamarin/app-constants/appcenter-pre-build.sh

У меня есть файл app.config из xamarin.form в следующем формате:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
    <add key="appId" value="12974" />
    <add key="url" value="https://abc.xyz.com" />
</appSettings>

Вот код, который я использую для чтения config.file и установки в файл constant.cs.Но я не уверен, какой из них будет работать.

if [ -e "$APP_CONSTANT_FILE" ]
then
    if [ -e "$ENV_FILE" ]
    then
        echo "Both Config files are available"
        #name=applicationID
        #$ awk -F\" -v n="$name" '/<ATTRIBUTE NAME="/ && $2==n {print $4}' data 
        #awk -F"\"" ' /AppId/ {print $4}' = -F"\"" ' /appID/ {print $4}' $APP_CONSTANT_FILE $ENV_FILE
        awk 'FNR==NR{a[FNR]=$0;next}{$NF=gensub(/value=".*"\/>/,"value=\""a[FNR]"\"\/>","g",$NF);print}' $APP_CONSTANT_FILE $ENV_FILE
        #sed -i '' 's#ApiUrl = "[-A-Za-z0-9:_./]*"#ApiUrl = "'$API_URL'"#' $APP_CONSTANT_FILE

        echo "File content:"
        cat $APP_CONSTANT_FILE
    else
        echo "Can not locate $ENV_FILE file"
        exit
    fi
else
    echo "Can not locate $APP_CONSTANT_FILE file"
    exit
fi

Пожалуйста, предоставьте мне ссылку или подсказку, чтобы прочитать значение по ключу и установить его в файл .cs

Ответы [ 2 ]

1 голос
/ 17 июня 2019

Вы не указали формат файла constant.cs, но вы можете начать с этого одного вкладыша:

cat config.xml | grep '<add ' | sed -E 's/.*key="?([^ "]*)"? value=([^ ]*) .*/\1 = \2;/'

Вывод будет:

appId = "12974";
url = "https://abc.xyz.com";

Если вычтобы получить другой вывод, просто измените эту часть кода: \1 = \2;, где \1 - это ключ, а \2 - это значение.

0 голосов
/ 16 июня 2019

Как отмечено в комментариях, плохая идея - анализировать общий XML с помощью сценариев bash.Кроме того, вы не указали выходной формат, который может помочь обеспечить лучшие альтернативы.

В любом случае, если вы абсолютно уверены , что входной файл всегда печатается так же красиво, как ив вашем примере и всегда использует двойные кавычки, и никогда не содержит экранированные XML-символы в ключах и значениях, и <appSettings> - это единственное место, где появляются элементы <add>, и множество других ifs, вот цикл bash, которыйизвлекает ключи и значения:

while read addkeyval; do
    key=$(echo "$addkeyval" | sed 's#.* key="\([^"]*\)".*#\1#')
    value=$(echo "$addkeyval" | sed 's#.* value="\([^"]*\)".*#\1#')
    echo "key='$key' value='$value'"
done < <(grep "<add " "$ENV_FILE")

Этот код неэффективен и хрупок, и я не буду его объяснять.Вам решать, хотите ли вы выяснить, как интегрировать его в свой сценарий, или же вы бы предпочли потратить время на следование некоторым полезным советам в комментариях.Я был просто в настроении для небольшого упражнения по программированию bash; -)

...