1

У меня есть один файл с именем 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

этот файл шаблона должен быть проанализирован с помощью этого сценария 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$//')

Когда я делаю сейчас bash replace-script.sh я получил следующий результат:

#!/bin/bash
RESULT=`curl https://testuser:supersecurepassword@my-domain.com/service`
echo 
if [ "" == "ok" ]; then
  exit 0
fi
exit 2

Итак, переменная, которую я хочу проанализировать, отлично анализируется. Но плохо то, что заменяется КАЖДЫЙ $ VAR, а не только те, которые объявлены в моем файле replace-script.sh .

1 ответ1

1

envsubst может взять список аргументов для замены:

envsubst '$MY_VAR_USERNAME $MY_VAR_PASSWORD'

(Они должны быть в одной строке, они должны иметь знаки $ , досадно.)


Обратите внимание, что стандартным оператором сравнения строк является = , а не == , последний работает в Bash и, возможно, в других, но не в dash (Debian и Ubuntu /bin/sh)

Кроме того, вы можете пропустить sed и использовать расширения оболочки, чтобы удалить суффикс из имени файла: "${srcFile%.tpl}"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .