bash - 在某个文本文件中执行 bash
问题描述
我想创建一个在文本文件中执行 bash 的模板系统。
例如,假设我们创建了一个简单的template.yaml
文件:
my_path: $(echo ${PATH})
my_ip: $(curl -s http://whatismyip.akamai.com/)
some_const: "foo bar"
some_val: $(echo -n $MY_VAR | base64)
希望执行每一个,结果可能如下所示:
my_path: /Users/roman/foo
my_ip: 1.2.3.4
some_const: "foo bar"
some_val: ABC
我将如何进行这样的替换?
想要这个的原因:
- 有很多值,做类似 sed 或envsubst的东西是不切实际的
- 应用一系列管道转换是很常见的
- 配置文件将从众多来源中填充,所有这些来源本质上都是 bash 命令
- 我确实需要创建一个特定格式的 yaml 文件(最终被另一个工具使用)
- 我可以创建别名等来增加可读性
- 通过让它在自己的 shell 中执行,任何半敏感值都不会存储为历史记录或文件。
我不赞成这种方法,并且很乐意尝试满足原因的建议。
解决方案
这可能有效,但您可以尝试:您可以创建一个脚本:script.sh
它将一个参数作为.yaml
文件,并将扩展该文件中的变量:
script.sh
:
echo 'cat <<EOF' > temp.sh
cat "$1" >> temp.sh
echo 'EOF' >> temp.sh
bash temp.sh
rm temp.sh
您可以从命令行调用脚本:./script.sh template.yaml
推荐阅读
- html - 将一行分成 4 列,在移动设备上显示相同
- javascript - 如何在 Chrome 开发工具中调试 JavaScript API?
- postgresql - Pacemaker 不启动资源 jboss 和 pgsql
- html - 溢出-x:仅在 Chrome 中与 CSS Flexbox 的隐藏冲突
- c# - 存储库 EF CF 引用不存在的字段失败
- swift - 测试在抛出的 func 上返回“表达式类型不明确,没有更多上下文”
- android - Firebase Sqlite db文件未上传
- android - Nv21 字节数据在 android 中保存为彩色 H264 格式
- xamarin.forms - 如何在 xamarin 表单中刷新选择器控件的 UI
- python-3.x - 在抓取页面时使用多个解析器