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

使用 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 代码,可能会带来安全风险。确保模板文件的内容是可信的。

posted @ 2024-12-13 21:37  牧之丨  阅读(2)  评论(0编辑  收藏  举报