为什么以及何时我要在 Lua 中使用 os.exit() 函数的参数“代码”

War*_*ian 2 parameters lua operating-system exit

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

os.exit(7)
Run Code Online (Sandbox Code Playgroud)

它将产生以下输出:

>Exit code: 7
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么以及何时更改脚本的退出值会有用?例如,我将在何时何地使用此退出代码“7”?

ex *_*ilo 5

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

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

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

$ lua -e "os.exit(7)"
$ echo $?
7
Run Code Online (Sandbox Code Playgroud)

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

handy_script

#!/usr/bin/env lua

io.write(string.format("Doing something important...\n"))
os.exit(7)
Run Code Online (Sandbox Code Playgroud)

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))
Run Code Online (Sandbox Code Playgroud)
#!/usr/bin/env lua

io.write(string.format("Doing something important...\n"))
os.exit(7)
Run Code Online (Sandbox Code Playgroud)

如果命令成功执行,则返回的第一个值os.execute是布尔值truefail否则(从 Lua 5.4 开始,fail仍然等效于nil)。"exit"如果命令正常终止,或者"signal"它被信号终止,则返回的第二个值是字符串。返回的第三个值是调用os.exit(), here的退出代码7