`base64 --decode` не заменяет переменную на значение, как` echo` - PullRequest
0 голосов
/ 01 марта 2019

Я использую пользовательские данные шаблона / экземпляра AWS ec2.Для этого я конвертирую свой файл в base64, чтобы им было легче манипулировать.

Тем не менее, он не раскрывается оболочкой / bash со значением переменной.

ДляНапример, я сократил как простую переменную.

JHtMRVNTT1BFTn0gIG9yICRMRVNTT1BFTg== декодируется до ${LESSOPEN} or $LESSOPEN

export LESSOPEN=Hereishtevalue
echo JHtMRVNTT1BFTn0gIG9yICRMRVNTT1BFTg== | base64 --decode
  • Результат:

    • >${LESSOPEN} or $LESSOPEN (я не уверен, какой из них должен работать)
  • Ожидается:

    • >Hereishtevalue or Hereishtevalue

Почему $LESSOPEN и / или ${LESSOPEN} не заменяются значением?

  • Цель состоит в том, чтобы сделать что-то вроде: echo JHtMRVNTT1BFTn0gIG9yICRMRVNTT1BFTg== | base64 --decode > myfile.txt

Как это исправить?

Файл base64 будет файломшаблон со значениями, зависящими от переменной, определенной в пользовательских данных шаблона / экземпляра EC2.

1 Ответ

0 голосов
/ 01 марта 2019

После комментариев расширение параметра уже произошло, поэтому строка содержит буквально ${LESSOPEN}.

Использование eval приведет к проблеме безопасности, поскольку может выполнить произвольный код.Обходной путь - проверить соответствие строки шаблону и использовать переменную косвенность, например.

variable=123
input='${variable}'
if [[ $input =~ \${([_a-zA-Z][a-zA-Z0-9]*)} ]]; then
    output=${!BASH_REMATCH[1]}
    echo "${output}"
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...