如何在出错时从bash函数返回?

时间:2015-10-03 18:06:57

标签: bash shell

我正在写一个bash函数。

如果控件中的任何命令错误输出,如何让控件退出该功能?

我试过这个:

function myFunc() {
    set +e
    cmd1
    cmd2
    set -e
}

它可以工作,但它也会关闭我的终端。

欣赏任何想法。

感谢。

3 个答案:

答案 0 :(得分:3)

“退出”表示退出shell。如果要从函数返回,则需要“返回”,您只能手动执行:

myFunc() {
  cmd1 || return $?
  cmd2 || return $?
}

如果你真的想使用set -e,也可以使用子shell:

myFunc () {
  (
    set -e
    cmd1
    cmd2
  ) || return $?
}

还考虑使用&&来创建一系列命令,每个命令都取决于之前命令的成功。

答案 1 :(得分:2)

将它们分开&&

cmd1 && cmd2 && cmd3 

答案 2 :(得分:0)

对于没有set -e的真值测试,可以测试#?的值以显示最后一个命令的状态:

#!/bin/bash


myfunc()
{
    true
    [ "$?" = "0" ] || return
    printf "passed truth test 1\n"

    true
    [ "$?" = "0" ] || return
    printf "passed truth test 2\n"

    false
    [ "$?" = "0" ] || return
    printf "passed false test\n"
}

myfunc

printf "passed continuation test\n"