bash - 退出函数栈而不退出 shell

标签 bash function shell exit

我在编写脚本时遇到了一个奇怪的问题。如果我要获取一个包含一堆函数的脚本,这些函数可能会调用输出字符串然后退出的错误函数,它将退出我的 shell。我知道它为什么这样做。这是因为函数调用与调用者处于同一进程空间(至少它在 bash 中),所以函数内的退出以提供的退出代码终止当前进程。示例:

error()
{
  echo $1
  exit 1
}

fn()
{
  if [ $# == 0 ]; then
    error "Insufficient parameters."
  fi
  # do stuff
}

$ fn
Insufficient parameters.
[shell terminates]

所以我的问题是,我可以在不终止当前 shell 并且不产生新的子 shell 的情况下退出函数堆栈中的所有函数吗?

谢谢

最佳答案

要在不退出 shell 的情况下退出函数堆栈,可以使用以下命令:

kill -INT $$

作为pizza声明,这就像按 Ctrl-C,这将停止当前脚本的运行并将您带到命令提示符。


注意:我没有选择 pizza 的唯一原因的答案是因为这被埋在他/她的答案中而没有直接回答。

关于bash - 退出函数栈而不退出 shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11141120/

相关文章:

c++ - 如何从 std::function 获取基本函数类型?

java - 从 shell 脚本运行 java 类

bash - 在 bash 中使用单个命令为 shell 变量分配默认值

php - mysqli_real_escape_string 与数组在 php 中?

javascript - 滚动到另一个 DIV 时更改一个 DIV 的 css

bash - BASH-将SSH输出分配给变量

c++ - 进程的退出代码是否会溢出小值?

c - 如何在调用系统后启用 ctrl-c/ctrl+break?

bash - 在 Bash 中,是否可以编写一个 'identity' 函数(相对于参数传递/返回)

bash - 如何自动重试 SFTP 连接尝试?