繁体   English   中英

在bash脚本中从属性文件中读取变量

[英]reading variables from properties file in bash scripting

使用shell脚本从属性文件读取时如何转义变量中的特殊字符。 属性文件具有键和值,键中包含句点(。)符号。 密钥中的此句点符号被视为可执行文件,bash正在执行它。 我把双引号放在变量扩展中,但仍然抛出错误。 我在这做错了什么

#!/bin/bash

source my-sonar.properties

for servicename in `cat  my-services.input`
do
 # Both variable expansions are not working.
 echo $servicename ${sonar.host.url} ${sonar.login}
 echo $servicename "$sonar.host.url" "$sonar.login"
done

root#cat my-sonar.properties

sonar.host.url=http://localhost:9000/sonar/
sonar.login=sonar-token-string

root#cat my-services.input

javaservice-one
javaservice-two

以下是我看到的错误。

my-sonar.properties: line 1: sonar.host.url=http://localhost:9000/sonar/: No such file or directory
my-sonar.properties: line 2: sonar.login=sonar-token-string: command not found
./sonar-execute.sh: line 7: ${sonar.host.url}: bad substitution

您可以在采购过程中传输点(并更改您使用它的代码):

source <(tr "." "_" < my-sonar.properties)
echo "${sonar_login}"

编辑:此解决方案忽略了'='符号右侧的任何点。 这可以通过source <(sed':a; s / [。]([^ =] * =)/ _ \\ 1 / g; ta'my-sonar.properties)来改进

请注意,可以编辑属性文件的人也可以插入将在您的帐户下执行的unix命令。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM