bash - 在将文件内容打印到 YAML 时保持 YAML 缩进(使用 bash 脚本)
问题描述
我需要将 python 文件的内容打印到 YAML 文件中,而不会弄乱 YAML 文件的缩进。YAML 文件中执行此操作的部分是对将传递到 Bash 脚本中的命令的描述,因此我们需要使用 Bash 脚本语法来完成此操作。例如,以下硬编码代码 WORKS。请注意“cat”行是如何以适当的缩进输出 script.py 的内容的:
诀窍是在尝试从另一个文件中读取 Python 时将其转换为该格式。实际上,为了创建该屏幕截图,我必须在生成文件后实际进入该文件并添加一堆空格以使其看起来正确。添加空格后,文件按预期工作。这是我手动编辑之前错误输出的样子:
有趣的是,python 的第一行(绿色箭头)从正确的行开始。但是其余的行都在左边距并且不正确(红色箭头)。
这是我用来将我的代码(在 script.py 中)放入构建规范的代码:
注意:${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
解决方案
所以问题是 !Include 函数将 script.py 的内容替换为 ${Script} 并不关心我们是否在 YAML 文件中,所以每当有新行时,它都会将它们全部抛出左边的路。
有两种方法可以解决这个问题。首先,我们可以简单地向 script.py 本身添加空格,这样当它的值被替换为 ${Script} 时,它们就会出现在正确的位置。
我们最终做的事情(因为第一种方法非常hacky且难以维护)是简单地放弃尝试!包含文件,而只是将整个 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
推荐阅读
- php - 如何将一个项目与多个域链接?
- r - R中的Smote函数
- zsh - 带有空格的转义字符串传递给 ZSH 函数
- c++ - 从文本文件中读取并打印内容 c++
- python - 在我的 Mac 上使用 Pycharm 时,我得到了一个无效的 Python SDK
- python - 为什么 Numpy 在 sigma 裁剪的矢量化 for 循环上较慢
- php - 用于 PHP 托管的 AWS CloudFront
- r - 根据唯一匹配条件过滤
- windows - 如何使用德尔福 VCL 传感器 (GPS)
- android - ViewBinding:无法访问'
':它在 'ActivityMainBinding' 中是私有的