bash - 创建脚本以在较大文件的占位符中替换小文件的内容
问题描述
我正在尝试创建一个脚本,它将文本文件中的多行文本插入到我的 index.html 中。
这就是我的想法。创建一个名为testEnvConfig.json.
内容的文件将包含我的测试 Firebase 服务器的设置。
var config = {
apiKey: "AIzaSyALdWxUxt63AwOrj-waTNvZo7_zt8CuMgs",
databaseURL: "https://bggoplantestdev.firebaseio.com",
projectId: "bggoplantestdev",
storageBucket: "bggoplantestdev.appspot.com",
messagingSenderId: "499035393973"
};
我还有一个非常大的 html 文件index.html
,其中包含超过 1000 行代码。但是,调用中只有一个变量$config
我只是想运行一个脚本./configureEnv <env>
,它将测试文件作为参数并将 $config 变量替换为测试文件的内容。
所以最终的结果是这样的:
* 之前*(在 index.html 中)
try {
var $config
var fbapp = firebase.initializeApp(config);
之后(在 index.html 中)
try {
var config = {
apiKey: "AIzaSyALdWxUxt63AwOrj-waTNvZo7_zt8CuMgs",
databaseURL: "https://bggoplantestdev.firebaseio.com",
projectId: "bggoplantestdev",
storageBucket: "bggoplantestdev.appspot.com",
messagingSenderId: "499035393973"
};
var fbapp = firebase.initializeApp(config);
关于如何做到这一点的任何建议?
解决方案
将文件内容读入变量。然后使用 here-doc 作为模板,并在您想要的位置替换变量。
#!/bin/bash
filename=$1
config=$(< "$filename")
cat <<EOF >index.html
try {
$config
// this $config variable would be substituted by the
// value of env in the script.
var fbapp = firebase.initializeApp(config);
} catch {
// do something
}
EOF
脚本的参数是包含配置的文件的名称。
其实,我建议你把var config =
配置文件拿出来,把结构放进去。变量的名称应该只是在模板中。然后脚本将如下所示:
#!/bin/bash
filename=$1
config=$(< "$filename")
cat <<EOF > index.html
try {
var config = $config;
// this $config variable would be substituted by the
// value of env in the script.
var fbapp = firebase.initializeApp(config);
} catch {
// do something
}
EOF
推荐阅读
- r - 从不寻常的格式转换为日期
- python - 如何根据 Python 中的变量更改 C 部分的坐标
- laravel - 如何在 Laravel 中获取“类别名称”?
- azure-machine-learning-service - 在 PythonScriptStep 中访问从 HTTP URI 创建的 FileDataset 时出现问题
- java - 在 PUT 请求中发送数字时空手道 1.0.1 NullPointerException
- button - PIC单片机自动按下
- angular - TypeScript 泛型类型作为参数
- flutter - 调整大小容器?
- html - 如何忽略 Jest 快照中的特定 HTML 元素?
- fortran - fortran中的过程指针