Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在将文件内容打印到YAML时维护YAML缩进(使用bash脚本)_Bash_Yaml_Amazon Cloudformation - Fatal编程技术网

在将文件内容打印到YAML时维护YAML缩进(使用bash脚本)

在将文件内容打印到YAML时维护YAML缩进(使用bash脚本),bash,yaml,amazon-cloudformation,Bash,Yaml,Amazon Cloudformation,我需要将python文件的内容打印到YAML文件中,而不会使YAML文件的缩进变得混乱。YAML文件中执行此操作的部分是对将传递到Bash脚本中的命令的描述,因此我们需要使用Bash脚本语法来完成此操作。例如,以下硬编码代码可以工作。注意“cat”行是如何输出带有适当缩进的script.py内容的: 诀窍是在尝试从另一个文件读取Python时将其转换为该格式。事实上,为了创建这个屏幕截图,我必须在生成文件后进入该文件,并添加一些空格,使其看起来正确。在我添加了空格后,文件按预期工作。以下是手动

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

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

有趣的是,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
版本:0.2
阶段:
安装:
命令:
-apt获取更新-y
建造:
命令:
-git config--global credential.helper'!aws codecommit凭据帮助程序$@'
-git config--全局凭据.UseHttpPath true
- |

cat>>scrypt.py所以问题是!将script.py的内容替换为${script}的Include函数并不关心我们是否在YAML文件中,因此每当出现新行时,它都会将它们一直扔到左边

有两种方法可以解决这个问题。首先,我们可以简单地将空格添加到script.py本身,这样当它的值被替换到${script}中时,它们就位于正确的位置

我们最终所做的(因为第一种方法非常粗糙,很难维护)就是放弃尝试!包括该文件,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
版本:0.2
阶段:
安装:
命令:
-apt获取更新-y
建造:
命令:
-git config--global credential.helper'!aws codecommit凭据帮助程序$@'
-git config--全局凭据.UseHttpPath true
-pip3安装——安静的boto3
-pip3安装——安静的GitPython
- |

cat>script.py我描述的情况是否正确,您正在使用script.yml,将${script}替换为script.py内容,然后尝试将python文本作为构建步骤运行?是否有其他方法传递该script.py?比如从某个地方下载并运行它?是的,这就是我想要做的。还有其他的方法,但我特别尝试使用指定的NO_SOURCE选项来实现这一点,所以我不需要从其他地方下载源代码,比如S3 bucket。我重复了这个问题,以减少许多不必要的噪音,并专注于这个问题。似乎问题在于插入变量的工具。它逐字插入,而您希望它缩进。在工具插入script.py之前,您可以尝试重新格式化它(为内容添加足够的缩进)。