可以在 Ruby 脚本末尾省略 "exit 0" 吗?
OK to omit "exit 0" at end of Ruby script?
在 Ubuntu 14 的 Ruby 1.9.3 上,当我 运行 脚本
#!/usr/bin/env ruby
和剧本
#!/usr/bin/env ruby
exit 0
他们做同样的事情。特别是,随后的 echo $?
打印 0
。这种行为有多普遍?我可以安全地从重要脚本的末尾省略 exit 0
吗?
在 UNIX 中普遍使用 0 表示成功,0 以外的代码表示不同类型的错误。
在任何普通语言中,除非您的程序抛出某种异常或以不同的代码显式退出,否则您可以放心地假设它以 0 退出。
根据 documentation of Process#exit
:
exit(status=true)
[...]The optional parameter is used to return a status code to the invoking environment. true and FALSE of status means success and failure respectively.
The interpretation of other integer values are system dependent.
意思是 Ruby 默认情况下成功退出,无论成功对底层系统意味着什么。
根据 exit codes from The Linux Documentation Project 的文档:
[...] A successful command returns a 0, while an unsuccessful one returns a non-zero value that usually can be interpreted as an error code. Well-behaved UNIX commands, programs, and utilities return a 0 exit code upon successful completion, though there are some exceptions. [...]
这意味着您将在 UNIX 环境中获得 0。
根据Microsoft's documentation on exit codes:
ERROR_SUCCESS
0 (0x0)
The operation completed successfully.
意味着您在 Windows 中也将得到零。
在 Ubuntu 14 的 Ruby 1.9.3 上,当我 运行 脚本
#!/usr/bin/env ruby
和剧本
#!/usr/bin/env ruby
exit 0
他们做同样的事情。特别是,随后的 echo $?
打印 0
。这种行为有多普遍?我可以安全地从重要脚本的末尾省略 exit 0
吗?
在 UNIX 中普遍使用 0 表示成功,0 以外的代码表示不同类型的错误。
在任何普通语言中,除非您的程序抛出某种异常或以不同的代码显式退出,否则您可以放心地假设它以 0 退出。
根据 documentation of Process#exit
:
exit(status=true)
[...]The optional parameter is used to return a status code to the invoking environment. true and FALSE of status means success and failure respectively.
The interpretation of other integer values are system dependent.
意思是 Ruby 默认情况下成功退出,无论成功对底层系统意味着什么。
根据 exit codes from The Linux Documentation Project 的文档:
[...] A successful command returns a 0, while an unsuccessful one returns a non-zero value that usually can be interpreted as an error code. Well-behaved UNIX commands, programs, and utilities return a 0 exit code upon successful completion, though there are some exceptions. [...]
这意味着您将在 UNIX 环境中获得 0。
根据Microsoft's documentation on exit codes:
ERROR_SUCCESS
0 (0x0)
The operation completed successfully.
意味着您在 Windows 中也将得到零。