Linux 工具命令(04): envsubst2 一个比使用 envsubst 更省心的环境变量渲染工具 状态: 未更新 原文链接: https://typonotes.com/posts/2023 /02/22/envsubst2-usage/ 对于配置文件的渲染, 通常我们会使用 envsubst。 $ envsubst < /path/2/template.txt > /path/2/target.txt $ envsubst '${key1} ${key2}' < /path/2/template.txt > /path/2/target.txt 更多参考 Linux 工具命令(03): 使用 envsubst 渲染环境变量到文件 为什么使用 envsubst2 使用 envsubst 进行模版渲染, 于是便又了 envsubst2。 envsubst2 的使用方式 envsubst2 使用了 {[a-zA-Z0-9_]+} 作为正则匹配的 模版。
Linux 工具命令(03): 使用 envsubst 渲染配置文件 状态: 未更新 原文链接: https://typonotes.com/posts/2023/02/22/envsubst-usage / envsubst 替换 shell 字符串或脚本中的环境变量。 ## 全部替换 $ envsubst < input-file.txt > output-file.txt 白名单模式, 这种模式可以指定 需要替换 的 白名单变量。 ## 白名单模式 $ envsubst '${key1} ${key2}' < input-file.txt > output-file.txt 命令行管道, 看看就好, 从来没这么用过。 $ echo '${abc}' | envsubst 安装方式 envsubst: command not found 当出现找不到命令时, 安装方式可以参考 在 alpine 中安装 $ apk
当在脚本中需要使用这些变量时,可以使用envsubst命令,该命令可以将环境变量的值替换到文本文件中。 本文将介绍如何使用envsubst命令替换环境变量。 使用envsubst替换环境变量 现在,我们假设我们有一个文件,其中包含了一些需要替换为环境变量的值。 注意:在执行envsubst命令之前,一定要确保已经定义了所有需要替换的环境变量。 在脚本中使用envsubst命令 在脚本中使用envsubst命令也非常简单,只需要将需要替换的文本保存在变量中,然后使用envsubst命令将变量中的值替换到目标文件中即可。 结论 使用envsubst命使用envsubst命令可以方便地将环境变量的值替换到文本文件中,这对于编写脚本和配置文件等非常有用。
", "CI_REPO": "drone/envsubst", "CI_REPO_LINK": "https://github.com/drone/envsubst ", "CI_REPO_NAME": "drone/envsubst", "CI_REPO_REMOTE": "https://github.com/drone /envsubst", "DRONE_REPO_NAME": "envsubst", "DRONE_REPO_OWNER": "drone", ", "CI_REPO": "drone/envsubst", "CI_REPO_LINK": "https://github.com/drone/envsubst /envsubst", "DRONE_REPO_NAME": "envsubst", "DRONE_REPO_OWNER": "drone",
/bin/sh set -e ME=$(basename $0) auto_envsubst() { local template_dir="${NGINX_ENVSUBST_TEMPLATE_DIR /bin/sh set -e ME=$(basename $0) auto_envsubst() { local template_dir="${ERRORPAGE_ENVSUBST_TEMPLATE_DIR :-/pages}" local suffix="${ERRORPAGE_ENVSUBST_TEMPLATE_SUFFIX:-.html}" local output_dir="${ERRORPAGE_ENVSUBST_OUTPUT_DIR envsubst-on-pages.sh,稍后使用。 /docker-entrypoint.d/30-envsubst-on-pages.sh:/docker-entrypoint.d/30-envsubst-on-pages.sh:ro -
命令了解 a、envsubst的作用 这个命令可以把环境变量传递给文件,并实现文件的变量替换,要替换的变量格式 {var}或 var b、envsubst如何使用 替换环境变量stdin输出到stdout : echo '{{$HOME}}' | envsubst 将输入文件中的环境变量替换为stdout: envsubst < {{path/to/input_file}} 将输入文件中的环境变量替换为文件 ,并将其输出到文件中: envsubst < {{path/to/input_file}} > {{path/to/output_file}} 用空格分隔的列表,替换输入文件中的环境变量: envsubst c、如何利用envsubst替换k8s deployment.yaml 假设deployment.yaml有个镜像内容形如下 image: $DEPLOY_PROCJECT_IMAGE 我们可以执行如下命令 envsubst < deployment.yml | kubectl apply -f - 这行命令的意思就是读取deployment.yml,并通过envsubst 把deployment.yml
/bin/sh set -e ME=$(basename $0) auto_envsubst() { local template_dir="${NGINX_ENVSUBST_TEMPLATE_DIR /bin/sh set -e ME=$(basename $0) auto_envsubst() { local template_dir="${ERRORPAGE_ENVSUBST_TEMPLATE_DIR :-/pages}" local suffix="${ERRORPAGE_ENVSUBST_TEMPLATE_SUFFIX:-.html}" local output_dir="${ERRORPAGE_ENVSUBST_OUTPUT_DIR "$defined_envs" < "$template" > "$output_path" done done } auto_envsubst exit 0 将内容保存为 30-envsubst-on-pages.sh /docker-entrypoint.d/30-envsubst-on-pages.sh:/docker-entrypoint.d/30-envsubst-on-pages.sh:ro -
命令了解 a、envsubst的作用 这个命令可以把环境变量传递给文件,并实现文件的变量替换,要替换的变量格式$ {var}或$ var b、envsubst如何使用 替换环境变量stdin输出到stdout : echo '{{$HOME}}' | envsubst 将输入文件中的环境变量替换为stdout: envsubst < {{path/to/input_file}} 将输入文件中的环境变量替换为文件 ,并将其输出到文件中:envsubst < {{path/to/input_file}} > {{path/to/output_file}} 用空格分隔的列表,替换输入文件中的环境变量: envsubst c、如何利用envsubst替换k8s deployment.ymal 假设deployment.yaml有个镜像内容形如下 image: $DEPLOY_PROCJECT_IMAGE 我们可以执行如下命令 envsubst < deployment.yml | kubectl apply -f - 这行命令的意思就是读取deployment.yml,并通过envsubst 把deployment.yml
build # 安装nginx FROM nginx:1.17-alpine RUN apk --no-cache add curl RUN curl -L https://github.com/a8m/envsubst /releases/download/v1.1.0/envsubst-`uname -s`-`uname -m` -o envsubst && \ chmod +x envsubst && \ mv envsubst /usr/local/bin COPY . /nginx.config /etc/nginx/nginx.template CMD ["/bin/sh", "-c", "envsubst < /etc/nginx/nginx.template >
FLINK_IMAGE_NAME=<IMAGE_NAME> FLINK_JOB_PARALLELISM=<PARALLELISM> envsubst < job-cluster-job.yaml.template | kubectl create -f - 当然,直接运行会报错的,除了填充变量以外,envsubst 也是个坑爹的工具,他其实就是用来替换文件中的占位变量的工具,Mac 用户可以通过 brew install gettext,安装完部分用户会发现 envsubst 命令还是用不了,如果不行的用户可以尝试运行下面的命令,直接去找到 envsusbt 运行文件的路径。 alias envsubst=/usr/local/Cellar/gettext/0.19.8.1/bin/envsubst 开始在 K8S 中部署 Flink 的组件。 FLINK_IMAGE_NAME=flink-job:latest FLINK_JOB_PARALLELISM=1 envsubst < job-cluster-job.yaml.template |
build # 安装nginx FROM nginx:1.17-alpine RUN apk --no-cache add curl RUN curl -L https://github.com/a8m/envsubst /releases/download/v1.1.0/envsubst-`uname -s`-`uname -m` -o envsubst && \ chmod +x envsubst && \ mv envsubst /usr/local/bin COPY . /nginx.config /etc/nginx/nginx.template CMD ["/bin/sh", "-c", "envsubst < /etc/nginx/nginx.template >
我们可以写一段脚本将文件中的环境变量进行替换,但完全没有这个必要,「因为有一个内置于操作系统的命令 envsubst 专职于文件内容的环境变量替换」。 PS: 如果系统中无自带 envsubst 命令,可使用第三方 envsubst3 进行替代。 长按识别二维码查看原文 https://github.com/a8m/envsubst image.png 注意,以下命令中的 COMMIT_REF_NAME 环境变量为当前分支名称,可通过 git 命令获取 $ cat preview.docker-compose.yaml | COMMIT_REF_NAME=$(git rev-parse --abbrev-ref HEAD) envsubst version actions/checkout@v2 - name: Preview run: | cat preview.docker-compose.yaml | envsubst
概述 一个 hello-world nodejs 项目 Dockerfile 和 app.dev.yaml(k8s deploy 文件) 存放在业务代码中 Gitlab CI Build 机器需要安装 envsubst develop - /^feature\/.*$/ - /^feature-.*$/ tags: # CI tag 名称 - dev script: # 构建命令 - envsubst - docker push $IMAGE - envsubst < app.dev.yaml | kubectl apply -f - variables: # 声明环境变量
To do this, we need to install `gettext` # then move `envsubst` out of the way so `gettext` can # be deleted completely, then move `envsubst` back. && apk add --no-cache --virtual .gettext gettext \ && mv /usr/bin/envsubst /tmp/ \ \ && runDeps="$( \ scanelf --needed --nobanner / tmp/envsubst \ | awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \ | sort -u | sort -u \ )" \ && apk add --no-cache $runDeps \ && apk del .gettext \ && mv /tmp/envsubst
概述 一个 hello-world nodejs 项目 Dockerfile 和 app.dev.yaml(k8s deploy 文件) 存放在业务代码中 Gitlab CI Build 机器需要安装 envsubst develop - /^feature\/.*$/ - /^feature-.*$/ tags: # CI tag 名称 - dev script: # 构建命令 - envsubst - docker push $IMAGE - envsubst < app.dev.yaml | kubectl apply -f - variables: # 声明环境变量
config" content="${APP_CONFIG}"> 研发代码使用 js 获取 meta var metas = document.getElementsByTagName('meta'); 使用 envsubst 不了解 envsubst 命令的可以自行百度。 envsubst < index.html.tmpl > index.html 。 2.2. 渲染占位符: envsubst < index.html > index.html.tmp ### 3.
替换数组变量 要使用 envsubst 替换 YAML 中的数组变量 CHAT_MODELS,可以按照以下步骤进行操作: 设置环境变量: export CHAT_MODELS="test-72b-instruct ,test-yi-34b-chat-0812" 创建一个模板文件 template.yaml,内容如下: chat_models: [${CHAT_MODELS}] 使用 envsubst 进行替换: envsubst < template.yaml > output.yaml 生成的 output.yaml 文件内容将是: chat_models: [test-72b-instruct, test-yi
build # 安装nginx FROM nginx:1.17-alpine RUN apk --no-cache add curl RUN curl -L https://github.com/a8m/envsubst /releases/download/v1.1.0/envsubst-`uname -s`-`uname -m` -o envsubst && \ chmod +x envsubst && \ mv envsubst /usr/local/bin COPY . /nginx.config /etc/nginx/nginx.template CMD ["/bin/sh", "-c", "envsubst < /etc/nginx/nginx.template >
setup lang="ts"> import { appConfig } from '@/apis/config' </script> <style scoped> </style> 5. envsubst -- index.html.tmpl --> <meta name="devkit:config" content="${APP_CONFIG}"> 使用 envsubst 注入环境变量。 ## env # APP_CONFIG=BaiduApi=//Dubai.api.com,QQapi=//QQ.com envsubst < index.html.tmpl > index.html
xxxx-maven-envs.yml stages: - name: 替换文件中的环境变量,仅支持 CNB_ 开头的环境变量 image: tencentcom/envsubst :latest script: - envsubst < xxxx_mvn_settings.xml > settings.xml - name: xxxx-maven-envs.yml stages: - name: 替换文件中的环境变量,仅支持 CNB_ 开头的环境变量 image: tencentcom/envsubst :latest script: - envsubst < xxxx_mvn_settings.xml > settings.xml - name: