我的const out = data.map(({ position: order, batches }) => {
const logs = batches.map(({ batchNumber, ammount }) => {
if (batchNumber) return { batchNumber, ammount };
return { ammount };
});
return { order, logs }
});
中有几个函数,我想在错误时终止整个“运行”。例如:
.bashrc
如果我在终端中输入function assert_env()
{
var_name=$1
if [ -z "${!var_name}" ]; then
printf "Missing environment variable: $var_name\n"
exit 1
fi
}
function my_test()
{
assert_env "abc"
print $abc
}
我想终止执行,但是这个脚本会关闭终端(正如预期的那样 - 我运行my_test
)。
如何在不关闭当前终端的情况下终止执行?
编辑:更具体一点 - 我不想从exit 1
返回,如果assert_env
的条件不是my_test
,我希望assert_env
中的以下命令不被执行遇到过像C ++ assert
答案 0 :(得分:1)
请注意exit
返回指定给shell本身的退出代码,因此使用exit 1
显然会退出当前的shell。您需要在此处使用return
。
只要考虑您的要求,只需使用函数assert_env
中的退出代码来决定是否要运行更多语句。这里使用return
将导致当前函数超出范围,并且返回给被调用者的代码可用于检查其成功/失败
function assert_env() {
local ret_val=0; var_name=$1
if [ -z "${!var_name}" ]; then
printf "Missing environment variable: $var_name\n"
ret_val=1
fi
return ${ret_val}
}
现在使用它
function my_test() {
if ! assert_env "abc"; then
return
fi
# Or could be just written as assert_env "abc" || return
}
这样,如果assert_env
返回0
,则my_test
中的if子句断言失败,其余代码将被执行。返回1
时,条件成立,返回函数调用而不退出主scipt。
请注意,function
关键字是非标准的,不符合POSIX,并且可能无法在shell中使用。如果你想让它变得可移植,只需删除关键字即可。
答案 1 :(得分:0)
我找到了一个解决方法 - 在子shell中执行函数内容
示例:
function assert_env()
{
var_name=$1
if [ -z "${!var_name}" ]; then
printf "Missing environment variable: $var_name\n"
exit 1
fi
}
function my_test()
{
(
printf "$1\n"
assert_env "abc"
printf $abc
)
}