在我的Dockerfile中,我想运行一个执行bash脚本的命令,该脚本获取从文件中读取的传递参数。
In 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)发布于 2018-09-23 08:44:52
问题是I/O重定向不是脚本的参数。
我们可以使用tty命令来检查脚本是否使用I/O重定向来读取文件。
如果脚本有TTY,那么检查参数的数量。从参数中读取插件名称。
如果它没有TTY,这意味着我们使用I/O重定向,在这种情况下我们不需要检查参数。通过mapfile命令将插件名称从I/O重定向读取到数组变量plugins中。
#!/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"
donehttps://stackoverflow.com/questions/52460963
复制相似问题