如何用source和source结合cat << EOF 和EOF )实现template.txt模板文件变量的替换
使用 source 和 cat << EOF 来实现 template.txt 模板文件变量的替换,你可以按照以下步骤操作:
- 创建
config.env文件:包含变量定义。 - 创建
template.txt文件:包含模板内容。 - 编写一个脚本:使用
source导入变量,然后使用cat << EOF和EOF读取模板文件并替换变量。
下面是一个完整的示例:
config.env
# config.env
appIntranetIp=192.168.1.1
TEERAServer=tee.example.com
template.txt
# 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
#!/bin/bash
# 导入变量
source config.env
# 读取模板文件内容并替换变量
cat << EOF > final_config.txt
$(<template.txt)
EOF
# 打印输出文件内容
cat final_config.txt
解释
导入变量:使用
source config.env命令将config.env文件中的变量导入到当前 shell 环境中。读取模板文件内容并替换变量:
cat << EOF > final_config.txt:使用 here-document 语法将内容输出到final_config.txt文件。$(<template.txt):使用命令替换将template.txt文件的内容读取到 here-document 中。由于变量已经在环境中定义,它们会被自动替换。
打印输出文件内容:使用
cat final_config.txt打印最终生成的配置文件内容。
这种方法利用了 shell 的 here-document 语法和命令替换功能,确保模板文件中的变量被正确替换。
如果你希望使用模板文件中的内容,并且不使用 export 和字符串替换命令来替换变量,你可以通过以下步骤实现:
- 在脚本中定义变量。
- 读取模板文件内容。
- 使用
eval命令来处理模板文件中的变量。
这种方法利用了 eval 命令的特性,它可以执行包含变量的字符串,并进行变量替换。
示例
假设你有一个模板文件 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
#!/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
解释
定义变量:
appIntranetIp="192.168.1.1"和TEERAServer="tee.example.com":在脚本中定义了两个普通变量appIntranetIp和TEERAServer。
读取模板文件内容:
template_content=$(<template.txt):将template.txt文件的内容读取到变量template_content中。
使用
eval处理模板文件中的变量:eval "cat <<EOF ... EOF":使用eval命令来执行包含变量的 here-document。eval会处理字符串中的变量并进行替换。- 输出重定向到
final_config.txt文件。
打印输出文件内容:
cat final_config.txt:打印最终生成的配置文件内容。
这种方法通过 eval 命令来处理模板文件中的变量,从而实现变量替换,并将结果输出到文件中。请注意,使用 eval 需要谨慎,因为它会执行任何有效的 shell 代码,可能会带来安全风险。确保模板文件的内容是可信的。
如何用source和source结合cat << EOF 和EOF )实现template.txt模板文件变量的替换的更多相关文章
- 基于Clang的Source to Source源代码转换(一)
Clang中包含了非常多的关于抽象语法树(AST)的访问和操作的类和接口.我们程序开发人员可以直接通过继承其中的某些类,重写其中的关键成员方法,从而形成我们自己的对抽象语法树的操作. 那么,首先我们简 ...
- linux cat命令的<<EOF
初初开始学习linux的命令,只对linux一些简单命令有一些了解! 首先我看到网上有一些创建一个文件采用的命令是(mkdir创建文件夹):cat > test1.txt <<EOF ...
- cat命令和EOF标识输出shell到文件
在某些场合,可能我们需要在脚本中生成一个临时文件,然后把该文件作为最终文件放入目录中.(可参考ntop.spec文件)这样有几个好处,其中之一就是临时文件不是唯一的,可以通过变量赋值,也可根据不同的判 ...
- SSIS 使用OLEDB/ADO NET Source 数据流source控件 连接Oracle失败
在做数据提取的时候发现一个非常奇怪的问题. Oracle客户端是安装正确并且Toad可以正常运行的,但是在新建OLEDB/ADO NET Source 数据流source控件连接Oracle的时候一直 ...
- 执行sql时出现错误 extraneous input ';' expecting EOF near '<EOF>'
调用jdbc执行hive sql时出现错误 Error while compiling statement: FAILED: ParseException line 5:22 extraneous i ...
- 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. ...
- 13个Cat命令管理(显示,排序,建立)文件实例
在Linux系统中,大多数配置文件.日志文件,甚至shell脚本都使用文本文件格式,因此,Linux系统存在着多种文本编辑器,但当你仅仅想要查看一下这些文件的内容时,可使用一个简单的命令-cat. c ...
- 如何用FFmpeg API采集摄像头视频和麦克风音频,并实现录制文件的功能
之前一直用Directshow技术采集摄像头数据,但是觉得涉及的细节比较多,要开发者比较了解Directshow的框架知识,学习起来有一点点难度.最近发现很多人问怎么用FFmpeg采集摄像头图像,事实 ...
- linux基本命令之文件浏览(cat,more,less,tail,head),文件操作命令(cp,mv,rm,find)
linux文件浏览,文件操作命令 文件管理之文件浏览命令 1.cat命令:显示文本文件所有内容 格式:cat 文件名 适用场景:适合只有少量数据的文件,例如只有几行内容的可以使用此命令. 2.more ...
- Failed: error processing document #281: unexpected EOF,往MongoDB当中插入json文件时出现的错误。
往MongoDB当中插入json文件时提示的错误(我的操作系统是win10): 当时的执行命令是:mongoimport -d test -c restaurants d://primer-datas ...
随机推荐
- USB gadget configfs
概述 USB Linux Gadget是一种具有UDC (USB设备控制器)的设备,可以连接到USB主机,以扩展其附加功能,如串口或大容量存储能力. 一个gadget被它的主机视为一组配置,每个配置都 ...
- vue本地项目启动时遇到coreJs相关报错问题处理
启动项目的时候报错 : 是因为core.js这个包丢失,需要大家重新下载即可 : yarn add core-js
- 推荐一款开源的API开放平台,5分钟就可以搭建企业专属的API开放门户!
前言 在过去的十年中,企业API治理并未受到广泛关注.然而,随着时间的推进,特别是在近几年,企业技术管理者对API治理的重视程度显著提高,开始将API视为企业资产的重要组成部分.API不再仅仅是技术层 ...
- Exchange限制邮箱用户每天/每分钟的发送邮件数量和速率
Exchange限制邮箱用户每天/每分钟的发送邮件数量和速率 近期遇到部分Exchange客服反馈内部邮箱账号密码被盗,给内部其他同事和外部邮箱发送大量钓鱼和诈骗邮件:对公司造成很大负面影响和经济损失 ...
- KubeSphere 社区双周报|2024.03.29-04.11
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- 记一次pip/pip3安装uwsgi报错
背景 本来是想着在centos 7.9的主机上面部署一个flask应用,采用的方式是linux+nginx+uwsgi来进行发布,其他的都没有问题,但是在使用pip安装uwsgi时报错了,安装不成功, ...
- uni-app 监听返回按钮
前置条件: 开发环境:windows 开发框架:uni-app , H5+,nativeJS 编辑器:HbuilderX 2.8.13 4. 兼容版本:安卓,IOS已作测试 进入正题: 文档地址uni ...
- 多模型COE方法
1.概述 在当前的人工智能发展中,单一模型的表现往往难以满足复杂任务的需求.为应对这些挑战,多模型协作的方法应运而生,"专家组合"(Mixture of Experts)便是其中一 ...
- CentOS 7环境下DM8数据库的安装与配置
一.环境准备 首先,确保你的系统已经安装了CentOS 7,并且具有足够的磁盘空间和内存来支持DM8数据库的运行.此外,你还需要具备管理员权限,以便进行后续的安装和配置操作. 二.下载DM8安装包 访 ...
- composer 基础操作
一.composer入门 1.每次安装新的包文件,会更新/vendor/autoload.php文件 2.composer.lock与composer.json的关系 文件composer.lock会 ...