在将文件内容打印到该YAML中时,保持YAML缩进(使用bash脚本)

时间:2019-03-14 22:11:52

标签: bash yaml amazon-cloudformation

我需要将python文件的内容打印到YAML文件中,而不会弄乱YAML文件的缩进。 YAML文件中执行此操作的部分是对将传递到Bash脚本中的命令的描述,因此我们需要使用Bash脚本语法来完成。例如,下面的硬编码代码WORKS。请注意,“ cat”行如何以适当的缩进输出script.py的内容:

enter image description here

诀窍是在尝试从另一个文件读取Python时将其转换为该格式。实际上,为了创建该屏幕截图,我必须在文件生成后实际进入文件并添加一堆空格,以便看起来正确。添加空格后,文件按预期工作。在手动编辑之前,错误的输出如下所示:

enter image description here

有趣的是,python的第一行(绿色箭头)从正确的行开始。但是其余的线一直在左边缘,并且是错误的(红色箭头)。

这是我用来将我的代码(在script.py中)放入buildspec的代码:

注意:$ {Script}是对我的script.py文件的引用。该变量正在文件的其他位置设置。

version: 0.2
phases:
  install:
    commands:
      - apt-get update -y
  build:
    commands:
      - git config --global credential.helper '!aws codecommit credential-helper $@'
      - git config --global credential.UseHttpPath true
      - |
        cat >> scrypt.py <<EOL
        ${Script}
        EOL

1 个答案:

答案 0 :(得分:1)

所以问题在于,将include.script的内容替换为$ {Script}的!Include函数并不关心我们是否位于YAML文件中,因此只要有新行,它就可以一直把它们扔到左边。

有两种解决方法。首先,我们可以简单地在script.py本身中添加空格,以便当其值替换为$ {Script}时,它们会放置在正确的位置。

我们最终要做的是(因为第一种方法非常hacky并且难以维护)是放弃尝试包含文件的尝试,而intead实际上只是将整个script.py内容粘贴到YAML文件中,即$ {Script}最初的位置。所以结果看起来像这样:

version: 0.2
phases:
  install:
    commands:
      - apt-get update -y
  build:
    commands:
      - git config --global credential.helper '!aws codecommit credential-helper $@'
      - git config --global credential.UseHttpPath true
      - pip3 install --quiet boto3
      - pip3 install --quiet GitPython
      - |
        cat > script.py <<EOL
        import boto3
        import git
        etc. etc. etc.
        EOL
      - python script.py