我正在写一个bash函数。
如果控件中的任何命令错误输出,如何让控件退出该功能?
我试过这个:
function myFunc() {
set +e
cmd1
cmd2
set -e
}
它可以工作,但它也会关闭我的终端。
欣赏任何想法。
感谢。
答案 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"