美文网首页
set -e/-o的作用

set -e/-o的作用

作者: 大道至简_6a43 | 来源:发表于2020-06-27 12:45 被阅读0次

    1. set -e

    set命令的-e参数,linux自带的说明如下:

    "Exit immediately if a simple command exits with a non-zero status."

    也就是说,在"set -e"之后出现的代码,一旦出现了返回值非零,整个脚本就会立即退出。有的人喜欢使用这个参数,是出于保证代码安全性的考虑。但有的时候,这种美好的初衷,也会导致严重的问题。

    2. set -o pipefail

    对于set命令-o参数的pipefail选项,linux是这样解释的:

    "If set, the return value of a pipeline is the value of the last (rightmost) command to exit with a  non-zero  status,or zero if all commands in the pipeline exit successfully.  This option is disabled by default."

    设置了这个选项以后,包含管道命令的语句的返回值,会变成最后一个返回非零的管道命令的返回值。听起来比较绕,其实也很简单:

    # test.sh

    set -o pipefail

    ls ./a.txt |echo "hi" >/dev/null

    echo $?

    运行test.sh,因为当前目录并不存在a.txt文件,输出:

    ls: ./a.txt: No such file or directory

    1  # 设置了set -o pipefail,返回从右往左第一个非零返回值,即ls的返回值1

    注释掉set -o pipefail 这一行,再次运行,输出:

    ls: ./a.txt: No such file or directory

    0  # 没有set -o pipefail,默认返回最后一个管道命令的返回值

    相关文章

      网友评论

          本文标题:set -e/-o的作用

          本文链接:https://www.haomeiwen.com/subject/keimfktx.html