Я продолжаю получать
./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:
Я думаю, что то, что вы видите здесь, является результатом того, как команда источника .
в оболочке POSIX dash
обрабатывает неквалифицированные имена файлов, что, по-видимому, отличается от bash
(по крайней мере, когда оно находится в режим не POSIX):
В bash
, документированное поведение для source
(он же .
) :
Чтение и выполнение команды из аргумента filename в текущем контексте оболочки. Если имя файла не содержит косую черту, переменная
PATH
используется для поиска имени файла. Когда Bash не находится в режиме POSIX, текущий каталог ищется, если имя файла не найдено в$PATH
.
Другими словами, .
(или source
) ищет PATH
и затем возвращается к текущему каталогу . Например, учитывая
$ cat > foo.sh
#!/bin/sh
bar=foo
затем
$ 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