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 以便 TERM 信号退出,然后发送一个 TERM 到顶层水平外壳:

#!/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/9893667/

相关文章:

c++ - C语言中函数中的switch指针

javascript - 简单的javascript递归函数返回的值比实际存在的值多?

c# - 任务循环退出的 CancellationTokenSource 和退出标志之间的区别

Bash/Date/法语本地环境

bash - 为什么在 unix 中列出文件夹需要这么长的命令?

c++ - Visual C++ 说 void 函数需要返回一个值

c++ - 如何保证快速关闭我的 win32 应用程序?

bash - 在不关闭 shell 的情况下返回退出代码

linux - 使用正则表达式将 bash 脚本转换为 sh

bash - 使用重定向标准输入调用 man 以在 BASH 脚本中显示帮助