чтение значений из properties.ini и получение файла не найден

Я продолжаю получать

./config.sh: line 5: .: properties_DEV.ini: file not found

При запуске deployment.sh я не уверен, почему все три файла находятся в одном каталоге.

Файл свойств

содержит значения, каждый файл для каждого целевого примера env: (properties_DEV.ini)

config_webApp_url=http://dev1

Затем config.sh загружает этот файл свойств и другие значения конфигурации:

#!/bin/sh
#target machine
installation_target_machine=DEV
#load specific machine properties file
. properties_${installation_target_machine}.ini
#Read a value from properties file
webApp_url=${config_webApp_url}

и последний файл deployment.sh:

#!/bin/sh
# read the installation values from config.sh
. ./config.sh

#do stuff with target configuration
echo going to copyToUrl: ${webApp_url}

Обновление: добавить запрошенный результат

user1@dev:/tmp/test> ls -lb
total 12
-rwxr-x--- 1 user1 mqm 212 Jan 16 11:35 config.sh
-rwxr-x--- 1 user1 mqm 146 Jan 16 11:37 deployment.sh
-rw-r----- 1 user1 mqm  30 Jan 16 11:36 properties_DEV.ini

user1@dev:/tmp/test> ./deployment.sh
./config.sh: line 5: .: properties_DEV.ini: file not found
going to copyToUrl:
1
задан 17 January 2018 в 04:39

1 ответ

Я думаю, что то, что вы видите здесь, является результатом того, как команда источника . в оболочке POSIX dash обрабатывает неквалифицированные имена файлов, что, по-видимому, отличается от bash (по крайней мере, когда оно находится в режим не POSIX):

В bash, документированное поведение для source (он же .) :

Чтение и выполнение команды из аргумента filename в текущем контексте оболочки. Если имя файла не содержит косую черту, переменная PATH используется для поиска имени файла. Когда Bash не находится в режиме POSIX, текущий каталог ищется, если имя файла не найдено в $PATH.

Другими словами, . (или source) ищет PATH и затем возвращается к текущему каталогу . Например, учитывая

$ cat > foo.sh
#!/bin/sh

bar=foo

затем

bash

$ echo "$bar"

$ . foo.sh
$ echo "$bar"
foo

Однако в dash поведение больше похоже на поиск исполняемых файлов:

тире

$ echo "$bar"

$ . foo.sh
sh: 2: .: foo.sh: not found

т.е. он не возвращается к текущему каталогу после поиска PATH; вам необходимо явно поставить префикс имени файла с ./:

$ . ./foo.sh
$ 
$ echo "$bar"
foo

TL; изменить DR

. properties_${installation_target_machine}.ini

на

. ./properties_${installation_target_machine}.ini

или использовать #!/bin/bash вместо #!/bin/sh

3
ответ дан 17 January 2018 в 04:39

Другие вопросы по тегам:

Похожие вопросы: