shell模拟--define从数组:错误:'--define'(“ dist)的错误选项。使用--define'macro expr'

时间:2018-09-20 16:50:21

标签: arrays shell mocking

我目前正在编写一个脚本,这应该使我更容易使用模拟来构建一些RPM。 计划是使可以为模拟(以及rpmbuild)--define参数添加值。 如果添加这样的定义值,我得到的错误是

  

错误:'-define'(“ dist)的错误选项。请使用--define'macro expr'

当我使用./test.sh --define“ dist .el7”这样简单的脚本执行脚本时,“ debug”输出如下:

  

/ usr / bin / mock --init -r epel-7-x86_64-定义“ dist .el7”

如果我复制它并直接在shell中执行它,则它实际上正在工作。有人知道为什么会这样吗?

我的脚本可以缩减为以下内容:

#!/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 :(得分:1)

问了这个问题之后,我的同事在UNIX stackexchange上向我指出了这个问题:Unix Stackexchange question 解决此问题的方式可以细分为以下几行:

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

以防万一有人偶然发现这种问题。