在测试退出代码处理时,在脚本中的任何位置触发任意退出代码通常很有用,就像一种Mock
使用side_effect = Exception()
.对于退出代码 0 和 1,有true
和false
内置函数,但对于任何其他退出代码,似乎只有笨重的选项:
使用子外壳:
(exit "$exit_code")
.这是昂贵且复杂的,可能会产生意想不到的副作用。启动一个新的 shell 可能会调用数千行代码,而专门用于设置退出代码的命令可能只有几行。子 shell 在生产代码中也是一种罕见的构造,因此新手可以很容易地得出结论,该代码相当于exit "$exit_code"
.创建并调用自定义函数:
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)。