未设置Bash变量值

时间:2014-09-05 11:33:25

标签: bash

我是bash shell脚本并遇到问题的新手。

我有这样的代码:

function build()
{

    echo "Building: " | tee -a $LOG_FILE
    { 
        #do some processing here and if error set the err var to say 2
        if [[ $err -eq 2 ]]; then
           echo "Error: exit"
           exitStatus=2
        fi
    } 2>&1 | tee -a $LOG_FILE | grep -e "$GREP_FAIL_TERM" -e "$GREP_ERROR_TERM"
 }

,其中

 GREP_FAIL_TERM='[Ff]ail'
 GREP_ERROR_TERM='[Ee][Rr][Rr][Oo][Rr][,;:\ ]'

 exitStatus is a global variable set to 0 at the beginning of script

当我在出现错误时退出此函数并检查exitStatus的值为0。 我读到了使用|在子shell中执行命令,该命令未反映在父级中。 但是,如何在输出到日志文件时执行上述代码。

1 个答案:

答案 0 :(得分:0)

是的,这是一个困难的情况。

最简单的方法是将标记放在子shell脚本的输出中,并根据它们的存在来确定状态。

你已经做了grep的错误(尽管grep -i会成为你的好朋友)。返回代码应该表明错误。

function build()
{
    { 
        echo "Building: "
        # do stuff
    } 2>&1 | tee -a $LOG_FILE | grep -Ei "fail|error[,;: ]"
    SUCCESS=$? # 0 if an error was detected
}