2013-07-25 59 views
1

,變量ECHO_ALL是一個全球性的,並設置爲「是」或「否」的基礎上選擇輸入解析。經過了完全bash腳本行到另一個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 
} 

---文件結束---

在另一個bash的文件I源上面的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」 ..選擇禁用()的偉大工程。 即使退出使-C工作正常。

,但它給我的錯誤有前綴的env-瓦爾設置,如選擇禁用CC = $ {...}的./configure ...

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

有沒有辦法讓我的選擇禁用()函數適用於任何可能的有效bash腳本行。

我知道它與我的optout()函數中使用「$ @」或「$ *」有關,但我已經詳細研究了bash手冊頁,並且我無法使其適用於所有可能的bash行情況。

到目前爲止突破這個限制我的選擇禁用(唯一的方法)是以下3線式的;這很煩人。

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

如何降低這一切回落到一個單一的選擇禁用任何想法...線

回答

3

optout就像任何其他的命令,因此必須通過任何本地修改環境之前。 optout運行的命令將繼承該環境。

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

順便說一句,這只是你很可能與你的optout功能,遇到的問題之一。你不能以這種方式運行任意的命令行,只能使用一個簡單的命令,然後是零個或多個參數(我希望即使是那個受限制的集合也有一些例外)。

+0

哇..我已經明顯被這個問題盯着長期看從樹木,不見森林! –