в приведенном ниже коде BASH переменная ECHO_ALL является глобальной и установлена либо в «да», либо «нет» на основе анализа параметров ввода.Передайте полную строку сценария bash другой функции bash для выполнения
--- начало ~/скрипты/Util/util-optout.sh ---
########################################
# @param [email protected]
# @return the return value from [email protected]
# @brief A wrapper function to allow
# for OPTional OUTput of any
# command w/wo args
#######################################
optout()
{
if [ ${ECHO_ALL} = 'no' ]; then
"[email protected]" 1>/dev/null 2>&1
return $?
else
"[email protected]"
return $?
fi
}
--- конец файла ---
в другом файле Баш я источник выше файла util-optout.sh и использовать функцию optout(), чтобы разрешить условный вывод .. по существу разрешить условное перенаправление любых команд, выводимых на/dev/null, чтобы заставить скрипты молчать.
, например, в каком-то другом сценарии сборки у меня есть
source ~/scripts/util/util-optout.sh
optout pushd ${ZLIB_DIR}
optout rm -vf config.cache
optout CC=${BUILD_TOOL_CC} ./configure ${ZLIB_CONFIGURE_OPT} --prefix=${CURR_DIR}/${INSTALL_DIR}
# ^^^^^^^^^^^^^^^^^^^
# ^this breaks my optout() command
# my optout() fails when there are prefixed bash env vars set like CC=${...} before ./configure
optout popd
optout make -C ${ZLIB_DIR} ${ZLIB_COMPILER_OPT} all
optout make -C ${ZLIB_DIR} install
для простых команд с любым типом параметров после него, как «Pushd» или «ет» .. OptOut() отлично работает. даже оконечные устройства make-C работают нормально.
, но он дает мне ошибку для команд, которые имеют префикс ENV-вары устанавливаются как Optout CC = $ {...} ./configure ...
Utils/util-optout.sh: линия 33 : CC = gcc: команда не найдена
Есть ли способ заставить мою функцию optout() работать для ЛЮБОЙ возможной допустимой строки сценария bash.
Я знаю, что это имеет какое-то отношение к использованию «$ @» или «$ *» в моей функции optout(), но я подробно изучил страницы руководства bash, и я не могу заставить это работать все возможные случаи линии bash.
до сих пор единственный способ преодолеть это ограничение с помощью моего optout() - это следующий трехстрочный стиль; что раздражает.
export CC=${BUILD_TOOL_CC}
optout ./configure ${ZLIB_CONFIGURE_OPT} --prefix=${CURR_DIR}/${INSTALL_DIR}
unset CC
Любые идеи о том, как свести все это обратно в один OptOut ... линия
wow .. Я, очевидно, смотрел на эту проблему, чтобы долго видеть лес с деревьев! –