shell mock --define from array: ERROR: Неверная опция для '--define' ("dist). Использовать --define 'macro expr' - PullRequest
0 голосов
/ 20 сентября 2018

В настоящее время я пишу сценарий, который облегчит мне создание некоторых RPM с использованием mock.План состоит в том, чтобы сделать возможным добавление значений для параметра mock (и для этого параметра rpmbuild) --define.Ошибка, которую я получаю, если добавить такое определенное значение:

ОШИБКА: неверная опция для '--define' ("dist). Использовать --define 'macro expr'

Когда я выполняю сценарий с таким простым, как ./test.sh --define "dist .el7", вывод "debug" выглядит следующим образом:

/ usr / bin / mock --init -r epel-7-x86_64 --define "dist .el7"

Если я скопирую это и выполню непосредственно в оболочке, это на самом деле работает. У кого-нибудь есть идея, почему это так?дело?

Мой сценарий может быть сокращен до следующего:

#!/bin/sh

set -e
set -u
set -o pipefail

C_MOCK="/usr/bin/mock"

MOCK_DEFINES=()

_add_mock_define() {
  #_check_parameters_count_strict 1 ${#}
  local MOCK_DEFINE="${1}"

  MOCK_DEFINES+=("${MOCK_DEFINE}")
}

_print_mock_defines_parameter() {
  if [ ${#MOCK_DEFINES[@]} -eq 0 ]; then
    return 0
  fi

  printf -- "--define \"%s\" " "${MOCK_DEFINES[@]}"
}

_mock_init() {
  local MOCK_DEFINES_STRING="$(_print_mock_defines_parameter)"
  local MOCK_PARAMS="--init"
  MOCK_PARAMS="${MOCK_PARAMS} -r epel-7-x86_64"
  [ ! "${#MOCK_DEFINES_STRING}" -eq 0 ] && MOCK_PARAMS="${MOCK_PARAMS} ${MOCK_DEFINES_STRING}"

  echo "${C_MOCK} ${MOCK_PARAMS}"
  ${C_MOCK} ${MOCK_PARAMS}

  local RC=${?}

  if [ ${RC} -ne 0 ]; then
      _exit_error "Error while mock initializing ..." ${RC}
  fi
}

while (( ${#} )); do
  case "${1}" in
    -s|--define)
      shift 1
      _add_mock_define "${1}"
      ;;
  esac

  shift 1
done

_mock_init

exit 0

1 Ответ

0 голосов
/ 24 сентября 2018

После того, как я задал этот вопрос коллеге, мне было указано на этот вопрос по unix stackexchange: Unix Stackexchange question Способ решения этой проблемы можно разбить на следующие строки:

DEFINES=()
DEFINES+=(--define "dist .el7")
DEFINES+=(--define "foo bar")
/usr/bin/mock --init -r epel-7-x86_64 "${DEFINES[@]}"

На тот случай, если кто-то еще наткнется на этот вид проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...