В настоящее время я пишу сценарий, который облегчит мне создание некоторых 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