在构建期间,我正在尝试使用 linux 命令从节点项目中的 package.json 文件中获取版本号。我在 Codebuild 中使用的是 Ubuntu 18.04 镜像。我想从 buildspec.yml 运行以下命令:
export PACKAGE_NAME=$(cat package.json | grep name | head -1 | awk -F: '{ print $2 }' | sed 's/[",]//g')
此命令的问题是 awk -F: 是无效的 YAML。为了解决这个问题,我添加了一个 POSIX 空格字符:
export PACKAGE_NAME=$(cat package.json | grep name | head -1 | awk -F:[[:space:]] '{ print $2 }' | sed 's/[",]//g')
此命令适用于 Windows 中的 Git Bash,适用于 Ubuntu WSL,适用于在 EC2 实例中启动的 Ubuntu 18.04,但在由 CodeBuild 运行时无法运行(变量返回为空),这不会使对我来说,作为 Linux 命令的任何意义都应该在相同类型的 Linux 上工作。我验证了 package.json 位于根目录中并且可以访问。
那么有没有语法上更好的方法来实现我的目标,或者有没有办法让 CodeBuild 像其他 linux 一样读取命令?
最佳答案
我通过在我的图像上安装 jq 然后改用它来解决这个问题:
PACKAGE_VERSION=$(jq -r ".version" package.json)
关于linux - POSIX 字符在 CodeBuild 服务器上不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58776815/