Bash不会退出语法错误

时间:2013-09-28 08:59:43

标签: bash debugging

我有一个bash代码,我在其中创建了一个在程序中调用的函数。我忘记在其中一个语句中放入quotation mark,因为脚本会引发语法错误。以下是代码:

#function
write_errors()
{
    #writes RIGHT TRUNCATION errors in bcp import
    temp_file=$1
    error_file=$2
    stepName=$3
    error_count=`fgrep -c "right truncation" ${error_file} "` #here is the extra quotation mark
    ...
}

#start of script
date
...
write_errors  #syntax error happens here
...
date #these lines are executed
rm -f ${temp}
rm -f ${error_file}
...
#end of script

我的问题是在write_errors中的语法错误之后,为什么bash在语法错误发生后执行该行?为什么不像其他语言一样退出语法错误?

1 个答案:

答案 0 :(得分:2)

默认情况下,bash出错时不会退出。

您可以通过在脚本开头添加以下行来请求该行为:

set -o errexit

请注意,它有一个简写:

set -e

This article有一些指示,说明为什么这不是bash中的默认行为。


如果你想编写健壮的bash脚本,你可能还想查看另一个标志nounset,它会在未定义的变量上出错。