shell - 如何将 JSON 中的值传递给 Docker 的 shell 脚本中的命令?
问题描述
我有一个 dockerfile 可以使用 Ubuntu 16.04 创建映像。在 docker 文件中:
# dotnet tool command
RUN apt-get install dotnet-sdk-2.2 -y
# for dot net tool
ENV PATH="${PATH}:/root/.dotnet/tools"
# jq command to read json file
RUN apt-get install jq -y
ADD xxx /xxx
# Copy the deploy-tool.json file
ADD deploy-tool.json /xxx/deploy-tool.json
# Copy the main sh script to xxx
ADD main-migrate.sh /xxx/main-migrate.sh
# Run the main sh script to run script in each xxx/*/bla..bla.sh
RUN chmod +x /xxx/main-migrate.sh
RUN /permasense/main-migrate.sh
我deploy-tool.json
的如下:
{
"name": "xxx.DEPLOY",
"version": "1.2.3-dev.29"
}
这是main-migrate.sh
name = $(jq '.name' /xxx/deploy-tool.json)
nugetFileVersion = $(jq '.version' /xxx/deploy-tool.json)
# TODO how to pass value from JSON to the command below
# install dot net nuget
dotnet tool install -g $name --version "$nugetFileVersion" --add-source /xxx/
我有xxx.DEPLOY.nupkg
inxxx
文件夹。
dockerfile
运行时main-migrate.sh
,我收到错误消息,抱怨找不到name
and 。nugetFileVersion
如何将name
&nugetFileVersion
从jq
命令传递到dotnet tool install
上面,如图所示main-migrate.sh
?
谢谢
解决方案
这个想法是对的,但问题在于main-migrate.sh
赋值语句中的脚本。Shell 分配不占用=
符号周围的空格。应该是
name=$(jq '.name' /xxx/deploy-tool.json)
# ^^^ no spaces
nugetFileVersion=$(jq '.version' /xxx/deploy-tool.json)
# ^^^ no spaces
推荐阅读
- indexing - Winform组合框鼠标滚轮不会更改所选索引
- android - 在 kotlin ina oneactivity 中插入 gif
- c++ - 如何在 wxWidgets 中将 wxNotebook 的选项卡居中
- javascript - XMLhttprequest 仅在循环中返回 null
- react-native - 如何将移动应用程序设置与服务器同步
- stm32 - STM32G4 OPAMP 作为带有 DAC BIAS 线的放大器的最佳方法是什么?
- php - 将 404 文档转换为“路由”脚本 - 如何设置 HTTP 代码?
- python - subprocess.Popen 标准输出和标准错误值不匹配
- angular - 是否有可能获得带有样式的 HTML 代码,而不是带有 Ionic Angular / Typescript 的字符串中的类来生成邮件 html 代码?
- node.js - HttpEventType.UploadProgress 仅被调用一次,event.loaded 和 event.total 相等,因此进度立即为 100%