bash - 如何从函数中有效地中止 Bash 脚本的执行

标签 bash function exit subshell

我在 Bash 函数中使用“exit 1”语句来终止整个脚本,它工作得很好:

function func()
{
   echo "Goodbye"
   exit 1
}
echo "Function call will abort"
func
echo "This will never be printed"

但后来我意识到它在调用时不起作用:

res=$(func)

我知道我创建了一个子 shell,“exit 1”会中止该子 shell,而不是主子 shell;有没有办法编写一个函数,无论如何调用它都会中止整个执行?

我只需要获取真正的返回值(由函数回显)。

最佳答案

可以做的是注册顶级shell以退出TERM信号,然后发送TERM到顶级shell:

#!/bin/bash
trap "exit 1" TERM
export TOP_PID=$$

function func()
{
   echo "Goodbye"
   kill -s TERM $TOP_PID
}

echo "Function call will abort"
echo $(func)
echo "This will never be printed"

因此,您的函数将 TERM 信号发送回顶级 shell,该信号将使用提供的命令捕获并处理,在本例中为“exit 1”

关于bash - 如何从函数中有效地中止 Bash 脚本的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17297202/

相关文章:

arrays - 使用多字符分隔符将字符串拆分为数组

PHP-上传前重命名文件

android - 使用 Android 中的后退按钮正确退出 PlayN 游戏

c - 让用户选择是否退出程序

javascript - React - 单击列表元素时更改图标

c - C exit() 的奇怪行为

bash - 如何为在 bash 中提示输入密码的命令提供密码?

linux - 如何在一行 BASH 中排序

c - 获取脚本中exe的返回值

jquery - 从 jQuery 函数返回值