Как подставить значение переменной в нужном месте файла-шаблона?

С помощью команды stat получаю сведения о последнем изменении файла, которые записываются в файл FileTimeChenge

stat --format=%z ~/Price > FileTimeChenge

С помощью mutt осуществляю рассылку пользователем с вложением файла

<!DOCTYPE html>
<html>
<head>
<meta http-equiv=«Content-Type» content=«text/html; charset=utf-8»>
</head>
<body>
<p><font ><em><strong>Здравствуйте!</strong></em></font></p>
<p>Файл изменён - "Тут должна быть дата"</p>
</p>
</body>
</html>

Подскажите, как вставить в html код данные из файла - FileTimeChenge

По совету пользователя @aleksandr barakin удалось получить вывод переменной при конкатенации

cat body | envsubst '${Test}'

Но, при выполнении цикла mutt в теле письма отображается переменная, а не значение переменной

for I in `cat list`; do cat body |envsubst '${Test}' | mutt -e "set content_type=text/html" -a "/var/log/mail.log" -s "Title" -- $I < body;echo $I;sleep 3 ;done

Ответы (1 шт):

Автор решения: aleksandr barakin

сохраняете содержимое файла в переменную и экспортируете её:

$ export soderzhimoe=$(cat файл)

а для подстановки значений переменных используете, например, программу envsubst из пакета gnu/gettext:

$ cat файл.хтмл
<p>Файл изменён - "${soderzhimoe}"</p>
$ cat файл.хтмл | envsubst '${soderzhimoe}'
<p>Файл изменён - "то что было в 'файл'"</p>

аргумент с перечислением переменных для подстановки не обязателен, но лучше использовать его для безопасности — на случай, если в тексте у вас будут употреблены строки, похожие на обращения к существующим переменным окружения.


дополнение про ошибку:

вот в этом фрагменте:

envsubst '${Test}' | mutt -e "set content_type=text/html" -a "/var/log/mail.log" -s "Title" -- $I < body

у вас получается конструкция: программа1 | программа2 < файл, т.е. программа2 получает на stdin содержимое файла, а не вывод программы1. уберите чтение из файла, вот этот кусок: < body.

→ Ссылка