lendo valores de properties.ini e obtendo arquivo não encontrado

1

Eu continuo recebendo

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

Ao executar deployment.sh , não sei por que, todos os três arquivos estão no mesmo diretório.

o arquivo de propriedades contém valores, cada arquivo para cada exemplo de env de destino: ( properties_DEV.ini )

config_webApp_url=http://dev1

Em seguida, config.sh está carregando este arquivo de propriedades e outros valores de configuração:

#!/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}

e o último arquivo é deployment.sh :

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

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

Atualização: adicione o resultado solicitado

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:
    
por user648026 16.01.2018 / 20:03

1 resposta

3

Acho que o que você está vendo aqui é o resultado de como o comando de origem . no shell POSIX dash manipula nomes de arquivos não qualificados - que parece ser diferente de bash (pelo menos, quando está em modo não-POSIX):

Em bash , o comportamento documentado de source (também conhecido como . .) é:

Read and execute commands from the filename argument in the current shell context. If filename does not contain a slash, the PATH variable is used to find filename. When Bash is not in POSIX mode, the current directory is searched if filename is not found in $PATH.

Em outras palavras, source (ou PATH ) pesquisa dash e depois volta para o diretório atual . Por exemplo, dado

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

bar=foo

então

bash

$ echo "$bar"

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

No entanto, em PATH , o comportamento é mais parecido com a forma como os executáveis são pesquisados:

traço

$ echo "$bar"

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

i.e. ele faz não retornar ao diretório atual após pesquisar ./ ; você precisa prefixar o nome do arquivo com #!/bin/bash explicitamente:

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

TL; alteração de DR

. properties_${installation_target_machine}.ini

para

. ./properties_${installation_target_machine}.ini

ou use #!/bin/sh no lugar de %code%

    
por steeldriver 17.01.2018 / 02:25