【问题标题】:Execute bash within some text file [duplicate]在某个文本文件中执行 bash [重复]
【发布时间】:2021-07-16 01:37:03
【问题描述】:

我想创建一个在文本文件中执行 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 中执行,所有半敏感值都不会存储在历史记录或文件中。

我不接受这种方法,并且很乐意尝试符合原因的推荐。

【问题讨论】:

  • 不要回避上述链接问题中的"Icky" 方法。

标签: bash


【解决方案1】:

这可能有效,但您可以尝试: 您可以创建一个脚本: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

【讨论】:

    【解决方案2】:

    感谢@joshmeranda 为我指明了正确的方向,this solved my problem

    echo -e "$(eval "echo -e \"`<template.yaml`\"")"
    

    虽然 eval 可能很危险,但在我的情况下,它的使用是可控的。

    【讨论】:

      猜你喜欢
      • 2016-09-19
      • 2019-07-16
      • 1970-01-01
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      • 2015-08-17
      • 2013-08-12
      • 2013-02-17
      相关资源
      最近更新 更多