是否有一个简单的 Bash 命令只设置退出代码?

是否有一个简单的 Bash 命令只设置退出代码?

在测试退出代码处理时,在脚本中的任何位置触发任意退出代码通常很有用,就像一种Mock使用side_effect = Exception().对于退出代码 0 和 1,有truefalse内置函数,但对于任何其他退出代码,似乎只有笨重的选项:

  1. 使用子外壳:(exit "$exit_code").这是昂贵且复杂的,可能会产生意想不到的副作用。启动一个新的 shell 可能会调用数千行代码,而专门用于设置退出代码的命令可能只有几行。子 shell 在生产代码中也是一种罕见的构造,因此新手可以很容易地得出结论,该代码相当于exit "$exit_code".

  2. 创建并调用自定义函数:

    simulate_exit_code() {
        return "$1"
    }
    simulate_exit_code "$exit_code"
    

    便宜但额外的复杂性。

我问是否有更好的选项比上述任何一个,而不是哪个最好(第一个是为了简洁,第二个是为了速度)。像这样一些非常简单的内置命令set_exit_code "$exit_code"将是理想的选择。

答案1

一种复杂的选择是:

. /dev/stdin <<< 'return "$exit_code"'

(不分叉,但在 5.1+ 中创建临时文件或管道)

为了完整性,

请注意,在 ksh93 中,(exit "$ret")不会分叉子 shell,因此相对高效。

bash是少数几个类似 Bourne 的 shell 之一,你不能set_status() return "$1"简单地写它。

在 中zsh,您可以使用匿名函数:

() return 3

当我有这样的需求时,我个人使用:

set_status() { return "$1"; }

这对我来说似乎是最简单的。

但总而言之,答案是有没有一个简单的 Bash 命令只设置退出代码AFAIK。

答案2

我相信自定义函数是您最好的选择(问题中的选项 2)。

相关内容