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

时间:2018-09-22 21:18:06

标签: bash ubuntu dockerfile

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

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

但是,正如我已经找到了在blog post上安装插件的方式一样,我认为它应该可以按原样工作。

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 ...退出

#!/bin/bash 

set -e

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

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

编辑

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

它适用于:

RUN /usr/local/bin/install-plugins.sh $(cat /usr/share/jenkins/ref/plugins.txt)

1 个答案:

答案 0 :(得分:0)

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

我们可以使用D:\Go>go run octa.go # command-line-arguments .\octa.go:42:10: syntax error: unexpected name at end of statement .\octa.go:46:13: syntax error: unexpected name at end of statement 命令来检查脚本是否正在使用I / O重定向来读取文件。

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

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

mapfile