使用 sourcecat << EOF 来实现 template.txt 模板文件变量的替换,你可以按照以下步骤操作:

  1. 创建 config.env 文件:包含变量定义。
  2. 创建 template.txt 文件:包含模板内容。
  3. 编写一个脚本:使用 source 导入变量,然后使用 cat << EOF 和 EOF 读取模板文件并替换变量。

下面是一个完整的示例:

config.env

plaintext
# config.env
appIntranetIp=192.168.1.1
TEERAServer=tee.example.com

template.txt

plaintext
# template.txt
#服务ip
HOST_IP: $appIntranetIp
#网关内部地址
BAIZE_GATEWAY_URI: http://gateway:32000
#内部nginx的https地址
BAIZE_NGINX_HTTPS_URI: https://beacon:32021/api
OPERATING_NODE_CODE: ''
TEE_RA_SERVER: $TEERAServer
TEE_MEMORY_RATE: 100.0

script.sh

bash
#!/bin/bash

# 导入变量
source config.env # 读取模板文件内容并替换变量
cat << EOF > final_config.txt
$(<template.txt)
EOF # 打印输出文件内容
cat final_config.txt

解释

  1. 导入变量:使用 source config.env 命令将 config.env 文件中的变量导入到当前 shell 环境中。

  2. 读取模板文件内容并替换变量:

    • cat << EOF > final_config.txt:使用 here-document 语法将内容输出到 final_config.txt 文件。
    • $(<template.txt):使用命令替换将 template.txt 文件的内容读取到 here-document 中。由于变量已经在环境中定义,它们会被自动替换。
  3. 打印输出文件内容:使用 cat final_config.txt 打印最终生成的配置文件内容。

这种方法利用了 shell 的 here-document 语法和命令替换功能,确保模板文件中的变量被正确替换。

如果你希望使用模板文件中的内容,并且不使用 export 和字符串替换命令来替换变量,你可以通过以下步骤实现:

  1. 在脚本中定义变量。
  2. 读取模板文件内容。
  3. 使用 eval 命令来处理模板文件中的变量。

这种方法利用了 eval 命令的特性,它可以执行包含变量的字符串,并进行变量替换。

示例

假设你有一个模板文件 template.txt,内容如下:

plaintext
#服务ip
HOST_IP: $appIntranetIp
#网关内部地址
BAIZE_GATEWAY_URI: http://gateway:32000
#内部nginx的https地址
BAIZE_NGINX_HTTPS_URI: https://beacon:32021/api
OPERATING_NODE_CODE: ''
TEE_RA_SERVER: $TEERAServer
TEE_MEMORY_RATE: 100.0

script.sh

bash
#!/bin/bash

# 定义变量
appIntranetIp="192.168.1.1"
TEERAServer="tee.example.com" # 读取模板文件内容
template_content=$(<template.txt) # 使用 eval 处理模板文件中的变量
eval "cat <<EOF
$template_content
EOF
" > final_config.txt # 打印输出文件内容
cat final_config.txt

解释

  1. 定义变量:

    • appIntranetIp="192.168.1.1" 和 TEERAServer="tee.example.com":在脚本中定义了两个普通变量 appIntranetIp 和 TEERAServer
  2. 读取模板文件内容:

    • template_content=$(<template.txt):将 template.txt 文件的内容读取到变量 template_content 中。
  3. 使用 eval 处理模板文件中的变量:

    • eval "cat <<EOF ... EOF":使用 eval 命令来执行包含变量的 here-document。eval 会处理字符串中的变量并进行替换。
    • 输出重定向到 final_config.txt 文件。
  4. 打印输出文件内容:

    • cat final_config.txt:打印最终生成的配置文件内容。

这种方法通过 eval 命令来处理模板文件中的变量,从而实现变量替换,并将结果输出到文件中。请注意,使用 eval 需要谨慎,因为它会执行任何有效的 shell 代码,可能会带来安全风险。确保模板文件的内容是可信的。

如何用source和source结合cat << EOF 和EOF )实现template.txt模板文件变量的替换的更多相关文章

  1. 基于Clang的Source to Source源代码转换(一)

    Clang中包含了非常多的关于抽象语法树(AST)的访问和操作的类和接口.我们程序开发人员可以直接通过继承其中的某些类,重写其中的关键成员方法,从而形成我们自己的对抽象语法树的操作. 那么,首先我们简 ...

  2. linux cat命令的<<EOF

    初初开始学习linux的命令,只对linux一些简单命令有一些了解! 首先我看到网上有一些创建一个文件采用的命令是(mkdir创建文件夹):cat > test1.txt <<EOF ...

  3. cat命令和EOF标识输出shell到文件

    在某些场合,可能我们需要在脚本中生成一个临时文件,然后把该文件作为最终文件放入目录中.(可参考ntop.spec文件)这样有几个好处,其中之一就是临时文件不是唯一的,可以通过变量赋值,也可根据不同的判 ...

  4. SSIS 使用OLEDB/ADO NET Source 数据流source控件 连接Oracle失败

    在做数据提取的时候发现一个非常奇怪的问题. Oracle客户端是安装正确并且Toad可以正常运行的,但是在新建OLEDB/ADO NET Source 数据流source控件连接Oracle的时候一直 ...

  5. 执行sql时出现错误 extraneous input ';' expecting EOF near '<EOF>'

    调用jdbc执行hive sql时出现错误 Error while compiling statement: FAILED: ParseException line 5:22 extraneous i ...

  6. sort命令与cat区别25.1 由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile [root@shiyan a]# cat a.txt aaaaaa [root@shiyan a]# sort a.txt >c.txt ------------- 在重定向前会自动创建c.txt这个文件。 [root@shiyan

    25.1 由于sort默认是把结果按照行排序后输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile[root@shiyan a]# cat a. ...

  7. 13个Cat命令管理(显示,排序,建立)文件实例

    在Linux系统中,大多数配置文件.日志文件,甚至shell脚本都使用文本文件格式,因此,Linux系统存在着多种文本编辑器,但当你仅仅想要查看一下这些文件的内容时,可使用一个简单的命令-cat. c ...

  8. 如何用FFmpeg API采集摄像头视频和麦克风音频,并实现录制文件的功能

    之前一直用Directshow技术采集摄像头数据,但是觉得涉及的细节比较多,要开发者比较了解Directshow的框架知识,学习起来有一点点难度.最近发现很多人问怎么用FFmpeg采集摄像头图像,事实 ...

  9. linux基本命令之文件浏览(cat,more,less,tail,head),文件操作命令(cp,mv,rm,find)

    linux文件浏览,文件操作命令 文件管理之文件浏览命令 1.cat命令:显示文本文件所有内容 格式:cat 文件名 适用场景:适合只有少量数据的文件,例如只有几行内容的可以使用此命令. 2.more ...

  10. Failed: error processing document #281: unexpected EOF,往MongoDB当中插入json文件时出现的错误。

    往MongoDB当中插入json文件时提示的错误(我的操作系统是win10): 当时的执行命令是:mongoimport -d test -c restaurants d://primer-datas ...

随机推荐

  1. Android Qcom USB Driver学习(八)

    因为要看usb charging的问题,所以需要补充一下battery的相关知识,算是入门吧 BAT SCH (1)VBATT_VSNS_P (2)BAT_THERM (3)I2C_SDA (4)I2 ...

  2. iOS多态使用小结

    多态是面试程序设计(OOP)一个重要特征,但在iOS中,可能比较少的人会留意这个特征,实际上在开发中我们可能已经不经意的使用了多态.比如说: 有一个tableView,它有多种cell,cell的UI ...

  3. 何为ORM框架?和ADO.NET 对比

    百度:ORM(Object Relational Mapping)框架采用元数据来描述对象与关系映射的细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中.简单理解为一种框架的格式 . 只 ...

  4. day18-方法

    何谓方法? System.out.println() System->类 out->对象 println()->方法 Java方法是语句的集合,它们在一起执行 一个功能. 方法是解决 ...

  5. 在 K8s 集群上部署 RabbitMQ 实战

    作者:老Z,云原生爱好者,目前专注于云原生运维,KubeSphere Ambassador. 前言 知识点 定级:入门级 RabbitMQ 单节点安装部署 RabbitMQ 集群安装部署 GitOps ...

  6. kaggle数据集某咖啡店的营销数据分析

    因为还处于数据分析的学习阶段(野生Python学者),所以在kaggle这个网站找了两个数据集来给自己练练手. 准备工作 import pandas as pd import os import ma ...

  7. OKR 目标和关键成果

    OKR(Objectives and Key Results)是目标与关键成果管理法,是一套明确和跟踪目标及其完成情况的管理工具和方法.1.OKR首先是沟通工具:团队中的每个人都要写OKR,所有这些O ...

  8. 反思---树上LIS

    反思---树上LIS 题目描述 给你一棵 n个节点的树,树的每个节点上都有一个值 a[i] . 现在要您求出从 1 号点到 i 号点的最短路径上最长上升子序列的长度. 就是单调栈优化+dfs回溯 对比 ...

  9. 3.5 Linux命令行下如何识别文件类型?

    对于第一次使用 Linux 命令行的用户,可能真的搞不清楚哪个是文件,哪个是目录,究其原因是很难直接通过名字看出来目录和文件的区别. 虽然从名称上不容易分辨,但是可以从颜色上进行区分.一般情况下,Li ...

  10. 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现二

    一.前言介绍: 1.1 项目摘要 随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势.古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力.然而,在现代社会中 ...