首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将参数从文件传递到从dockerfile运行的脚本

将参数从文件传递到从dockerfile运行的脚本
EN

Stack Overflow用户
提问于 2018-09-23 05:18:06
回答 1查看 63关注 0票数 0

在我的Dockerfile中,我想运行一个执行bash脚本的命令,该脚本获取从文件中读取的传递参数。

In plugins.txt是一个指定的插件(完整的文件内容:configuration-as-code),但是bash脚本根本不接收任何参数。

但由于我已经找到了如何在blog post上安装插件的方法,我假设它应该按原样工作。

代码语言:javascript
复制
COPY plugins.txt /usr/share/jenkins/ref/plugins.txt
COPY install-plugins.sh /usr/local/bin/install-plugins.sh
RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt

安装程序脚本从以下几行开始,以Usage /usr/local/bin/install-plugins.sh plugin1 plugin 2 ...退出

代码语言:javascript
复制
#!/bin/bash 

set -e

if [ $# -eq 0 ]; then
  echo "USAGE: $0 plugin1 plugin2 ..."
  exit 1
fi

如何正确地将文件plugins.txt的内容传递给脚本?

编辑

我找到了一个正确传递参数的解决方案。有人知道为什么最初的尝试是错误的吗?

它与以下各项配合使用:

代码语言:javascript
复制
RUN /usr/local/bin/install-plugins.sh $(cat /usr/share/jenkins/ref/plugins.txt)
EN

回答 1

Stack Overflow用户

发布于 2018-09-23 08:44:52

问题是I/O重定向不是脚本的参数。

我们可以使用tty命令来检查脚本是否使用I/O重定向来读取文件。

如果脚本有TTY,那么检查参数的数量。从参数中读取插件名称。

如果它没有TTY,这意味着我们使用I/O重定向,在这种情况下我们不需要检查参数。通过mapfile命令将插件名称从I/O重定向读取到数组变量plugins中。

代码语言:javascript
复制
#!/usr/bin/env bash
set -eu

if tty &>/dev/null && [ "$#" -eq 0 ]; then
  echo "USAGE: $0 plugin1 plugin2 ..."
  exit 1
fi

if tty &>/dev/null; then
  plugins=("$@")
else
  mapfile -t plugins
fi

for plugin in "${plugins[@]}"; do
  echo install_plugin "$plugin"
done
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52460963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档