Передача аргументов из файла в скрипт, запускаемый из dockerfile - PullRequest
0 голосов
/ 23 сентября 2018

В моем Dockerfile я хочу запустить команду, которая выполняет сценарий bash, который получает переданные аргументы, которые считываются из файла.

В plugins.txt указан плагин (полное содержимое файла: configuration-as-code), но bash-скрипт вообще не получает никаких аргументов.

Но так как я нашел способ установки плагинов для сообщения в блоге , я предполагаю, что он должен работатькак есть.

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 голосов
/ 23 сентября 2018

Проблема в том, что перенаправление ввода-вывода не является параметром скрипта.

Мы можем использовать команду tty, чтобы проверить, использует ли скрипт перенаправление ввода-вывода для чтения из файла.

Если в скрипте есть TTY, проверьте количество параметров.Чтение имен плагинов из параметров.

Если у него нет TTY, это означает, что мы используем перенаправление ввода / вывода, нам не нужно проверять параметры в этом случае.Считайте имена плагинов из перенаправления ввода / вывода в переменную массива plugins командой mapfile.

#!/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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...