为什么和何时会使用 Lua 中的 os.exit() 函数的参数 "code"

在 Lua 文档中,他们说 "os.exit([code])" 中的 code 参数在退出脚本时返回值不为 0,例如,如果我运行以下行:

os.exit(7)

它将生成以下输出:

>Exit code: 7

我的问题是 为什么和何时更改脚本的退出值会有用?比如,在什么情况下和何地我会使用这个退出代码 "7"?

点赞
用户6879826
用户6879826

该值被返回给运行 Lua 解释器的进程;C 语言也具有相同的功能。

通常情况下,脚本成功执行时返回 0,当出现某种错误时返回非零值。如果从另一个脚本调用 Lua 脚本,错误代码可以指导调用脚本处理错误。

在 Bash 中,您可以通过检查 $? shell 变量来检查返回的值:

$ lua -e "os.exit(7)"
$ echo $?
7

如果您使用 os.execute 从另一个 Lua 脚本调用 Lua 脚本,则退出代码是返回的三个值中的第三个:

handy_script:

#!/usr/bin/env lua

io.write(string.format("Doing something important...\n"))
os.exit(7)

main_script:

#!/usr/bin/env lua

b, s, n = os.execute("./handy_script")
io.write(string.format("handy_script returned %s, %s: %d\n", tostring(b), s, n))
$  ./main_script
Doing something important...
handy_script returned nil, exit: 7

os.execute 返回的第一个值是布尔值 true,如果命令成功执行,则返回 fail(在 Lua 5.4 中,fail 仍等价于 nil)。第二个返回值是字符串 "exit",如果命令正常终止,或者是 "signal",如果它被信号终止。第三个返回值是从对 os.exit() 的调用中返回的退出代码,在此处为 7

2020-08-10 01:48:43