Substituição de variáveis em um arquivo

1

Eu tenho um arquivo chamado template.tpl .

#!/bin/bash
RESULT='curl https://${MY_VAR_USERNAME}:${MY_VAR_PASSWORD}@my-domain.com/service'
echo $RESULT
if [ "$RESULT" == "ok" ]; then
  exit 0
fi
exit 2

este arquivo de modelo deve ser analisado com este script replace-script.sh

#!/bin/bash
set -a
: ${MY_VAR_USERNAME="testuser"}
: ${MY_VAR_PASSWORD="supersecurepassword"}
# replace every variable declared in a .tpl file delete the .tpl extention 
srcFile="template.tpl"
cat $srcFile | envsubst > $(echo $srcFile | sed -r 's/.tpl$//')

Quando eu faço agora um bash replace-script.sh , recebo o seguinte resultado:

#!/bin/bash
RESULT='curl https://testuser:[email protected]/service'
echo 
if [ "" == "ok" ]; then
  exit 0
fi
exit 2

Então, a variável que eu quero ser analisada é perfeitamente analisada. Mas o ruim é que EVERY $ VAR é substituído, não apenas os declarados no meu arquivo replace-script.sh .

    
por Joerg 27.04.2017 / 16:47

1 resposta

1

envsubst pode obter uma lista dos argumentos para substituir:

envsubst '$MY_VAR_USERNAME $MY_VAR_PASSWORD'

(Eles devem estar em uma única string, eles devem ter os sinais $ , irritantemente.)

Note que o operador de comparação de string padrão é = , não == , o último funciona no Bash e talvez outros, mas não em dash (Debian e% s /bin/sh )

Além disso, você pode pular o sed e usar as expansões do shell para remover o sufixo do nome do arquivo: "${srcFile%.tpl}"

    
por 27.04.2017 / 22:02