我需要使用Shell脚本从app.config文件读取环境变量,并且需要在constant.cs文件中进行设置。
这是我关注的链接:
我具有来自xamarin.form的以下格式的app.config文件:
<?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文件
答案 0 :(得分:1)
您未提供文件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
是值。
答案 1 :(得分:0)
正如评论中指出的那样,用bash脚本解析通用XML是一个坏主意。另外,您没有指定输出格式,这可能有助于提供更好的替代方法。
无论如何,如果您完全确定输入文件的格式总是和示例中的一样漂亮,并且始终使用双引号,并且在键和值,而<appSettings>
是出现<add>
元素的唯一地方,还有许多其他if,这是一个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编程练习;-)