Назад | Перейти на главную страницу

распознавать переменную bash внутри текстового файла

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

содержимое файла template.example.log:

server name: $HOSTNAME
current user: $USER

Я пробую разные способы сделать это работает.

содержимое файла log.sh:

1) не работают выходной файл some_log_1.log такой же как template.example.log и переменные не менялись.

FILE_TEMPLATE="`cat template.example.log`"
cat > some_log_1.log <<EOF
$FILE_TEMPLATE
EOF

2) не работают с командой echo, происходит то же, что и выше.

echo $FILE_TEMPLATE > some_log_1.log

но если я это сделаю, это сработает!

cat > some_log_1.log <<EOF
    server name: $HOSTNAME
    current user: $USER
EOF

вывод правильный!

server name: ubuntu-server
current user: leafar

но я не хочу, чтобы сценарий запускался таким образом. Я хочу прочитать содержимое текстового файла и перенести его в другой текстовый файл и fill the variables.

КАК Я МОГУ ЭТО СДЕЛАТЬ? СПАСИБО. Ps: извините за мой слабый английский

Один из вариантов - использовать sed для редактирования файлов. Это позволяет вам ограничить количество заполняемых переменных.

Это заполнит template.txt и выведет его в fill.txt:

sed -e "s/\$HOSTNAME/$HOSTNAME/" -e "s/\$USER/$USER/" template.txt > filled.txt

template.txt:

server name: $HOSTNAME
current user: $USER

fill.txt:

server name: ubuntu-server
current user: leafar