我目前正在编写一个脚本,这应该使我更容易使用模拟来构建一些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
答案 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[@]}"
以防万一有人偶然发现这种问题。