2024年第四节:Bash编程易犯的错误

泥小猴系统教程网 2025-01-18 16:51:01 76阅读
logfile

这是一个很常见的错误,显然你本来是想将标准输出与标准错误输出都重定向到文件logfile 中,但是你会惊讶地发现,标准错误依然输出到屏幕中。

这种行为的原因是,重定向在命令执行之前解析,并且是从左往右解析。上面的命令可以翻译成,将标准错误输出重定向到标准输出,然后将标准输出重定向到文件 logfile 中。所以,到最后,标准错误并没有重定向到文件中,而是依然输出到终端:

2024年第四节:Bash编程易犯的错误

somecmd >>logfile 2>&1

登录后复制

更加详细的说明见BashFAQ。

43. cmd; (( ! $? )) || die

2024年第四节:Bash编程易犯的错误

只有需要捕获上一个命令的执行结果进,才需要记录$?的值,否则如果你只需要检查上一个命令是否执行成功,直接检测命令:

if cmd; then
    ...
fi

或者使用 case 语句来检测多个或能的返回码:

cmd
status=$?
case $status in
    0)
        echo success >&2
        ;;
    1)
        echo 'Must supply a parameter, exiting.' >&2
        exit 1
        ;;
    *)
        echo 'Unknown error, exiting.' >&2
        exit $status
esac

登录后复制

文章版权声明:除非注明,否则均为泥小猴系统网网络收集而来,如有任何问题请联系站长。

目录[+]