我有一个.bashrc
,我想看起来像这样:
testfunc() {
if [ condition passes ]
then
stop all execution
fi
}
jobA() {
testfunc
...
}
jobB() {
testfunc
...
}
问题是如何在不退出终端的情况下停止所有执行?我知道只有两个选项可以停止执行:
exit
: 这也会导致终端关闭return
:它只停止返回所在的函数中的执行。我可以让所有调用testfunc
检查其返回代码的函数,但这有很多重复的 if 语句。
还有其他选择吗?
检查testfunc
的结果并不是那么麻烦:testfunc || return
而不是你的裸testfunc
就是你所需要的(你不必拥有整个if/then/fi
(。
不过对于你的问题...不,AFAIK 无法退出所有函数,但不能退出 shell 本身。
只需使用圆括号将您的作业放入子外壳中即可。然后,您可以退出子外壳。
$ type testfunc
testfunc is a function
testfunc ()
{
if true; then
exit;
fi
}
$ type jobA
jobA is a function
jobA ()
{
testfunc
}
$ type jobB
jobB is a function
jobB ()
{
testfunc
}
$ ( jobA; jobB; )
$
并且终端不会退出。
如果将整个.bashrc
代码包装在单个服务while
循环中,则可以使用break
将其保留:
#!/bin/bash
# for testing
condition="true"
# a test func
func() {
if [ $condition == "true" ]
then
# 1 to break after calling, 0 not
return 1
fi
}
# the while
while [ $((++i)) -eq 1 ]
# the main .bashrc code goes here
do
# "exit" after a function
func || break
# or exit from main
if [ $condition != "true" ]
then
break
fi
done
# anything after the above done gets executed after break