чтение переменных из файла свойств в скриптах bash - PullRequest
0 голосов
/ 30 апреля 2019

Как экранировать специальные символы в переменных при чтении из файла свойств с использованием сценариев оболочки.Файл свойств содержит ключ и значение, а ключ содержит символ точки (.).Этот символ периода в ключе считается исполняемым, и 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

1 Ответ

0 голосов
/ 01 мая 2019

Вы можете перенести точки во время поиска (и изменить код, в котором вы его используете):

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

EDIT: Это решение игнорирует любые точки справа от знака «=». Это может быть улучшено источник <(sed ': a; s / [.] ([^ =] * =) / _ \ 1 / g; ta' my-sonar.properties) </p>

Имейте в виду, что тот, кто может редактировать файл свойств, также может вставить команды unix, которые будут выполняться под вашей учетной записью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...