【问题标题】:Pass a full bash script line to another bash function to execute将完整的 bash 脚本行传递给另一个 bash 函数以执行
【发布时间】:2013-07-25 19:27:39
【问题描述】:

在下面的 BASH 代码中,变量 ECHO_ALL 是一个全局变量,并根据选项的输入解析设置为“是”或“否”。

--- ~/scripts/util/util-optout.sh 开头---

########################################
# @param    $@
# @return   the return value from $@
# @brief    A wrapper function to allow
#           for OPTional OUTput of any
#           command w/wo args
#######################################
optout()
{
    if [ ${ECHO_ALL} = 'no' ]; then
        "$@" 1>/dev/null 2>&1
        return $?
    else
        "$@"
        return $?
    fi
}

---文件结束---

在另一个 bash 文件中,我获取了上面的 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”或“rm”.. optout() 效果很好。 即使是 optout 也可以使 -C 工作正常。

但是对于具有前缀 env-vars 设置的命令(例如 optout CC=${...} ./configure ...

utils/util-optout.sh:第 33 行:CC=gcc:找不到命令

有没有办法让我的 optout() 函数适用于任何可能的有效 bash 脚本行。

我知道这与在我的 optout() 函数中使用“$@”或“$*”有关,但我已经详细研究了 bash 手册页,但我无法使其适用于所有人可能的 bash 行情况。

到目前为止,使用我的 optout() 克服此限制的唯一方法是以下 3 行样式;这很烦人。

export CC=${BUILD_TOOL_CC}
optout ./configure ${ZLIB_CONFIGURE_OPT} --prefix=${CURR_DIR}/${INSTALL_DIR}
unset CC

关于如何将其全部减少到单个选择退出的任何想法...行

【问题讨论】:

    标签: linux bash function arguments


    【解决方案1】:

    optout 与任何其他命令一样,因此必须在对环境进行任何本地修改之前。 optout 运行的命令将继承该环境。

    CC=${BUILD_TOOL_CC} optout ./configure ${ZLIB_CONFIGURE_OPT} --prefix=${CURR_DIR}/${INSTALL_DIR}
    

    顺便说一句,这只是您在使用optout 函数时可能遇到的问题之一。你不能以这种方式运行任意命令行,只能运行一个简单的命令,后跟零个或多个参数(我希望即使是受限集也会有一些例外)。

    【讨论】:

    • 哇..我显然一直盯着这个问题很久了,从树上看森林!
    猜你喜欢
    • 2022-12-08
    • 2011-06-06
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多