【问题标题】:are there any benefits of ending a bash script with exit用 exit 结束 bash 脚本有什么好处吗
【发布时间】:2019-11-15 12:06:51
【问题描述】:

我遇到了一个以 exit 行结尾的 bash 脚本。有什么改变吗(在终端关闭时避免那些“来源”而不是直接打电话的吓人用户)?

请注意,我对退出和返回之间的区别并不特别感兴趣。在这里,我只对 bash 脚本末尾不带参数的退出之间的区别感兴趣(一个是关闭控制台或进程,它获取脚本而不是调用)。

可以解决一些鲜为人知的shell方言吗?

【问题讨论】:

  • 基本上,exit 将关闭你所在的子shell。如果你在一个你想停止运行的脚本中,这可能很有用(如果你source 脚本就更少了)。
  • 脚本文件的结尾无论如何都会关闭
  • 我不知道这是否重复,但它不是与上述问题的重复。
  • 唯一的好处是它使事情更加明确。没有参数的exitexit $? 相同,这与根本不显式退出相同。人们经常忘记脚本返回的值很重要。添加显式的exit 可以提醒读者返回的值很重要。
  • 另外,如果你不想考虑最后一个命令的退出状态变成脚本本身的状态的含义,那么养成使用显式@987654327的习惯是合理的@ 在特定情况下是否真的需要它。

标签: bash exit


【解决方案1】:

这样做通常没有任何好处。只有缺点,特别是无法像你说的那样获取脚本。

您可以构建重要的场景,例如让sourceing 脚本依赖它来终止错误,或者让自解压存档标头避免执行其有效负载,但这些不寻常的情况不应成为基础一般指导方针。

【讨论】:

  • 您只指出了好处而没有缺点,而声称答案恰恰相反。我建议在答案中填写缺点,以表明您的说法是正确的。
【解决方案2】:

一个显着的优势是它使您可以显式控制返回代码。

否则脚本的返回码将是它执行的最后一个命令的返回码。这可能或可能不表示整个脚本的实际成功或失败。

一个稍微不那么显着的优势是,如果最后一个命令的退出代码 很重要,那么您可以使用“exit $?”来跟进它。这会告诉稍后出现的维护程序员,是的,您确实考虑了程序的退出代码应该是什么,他不应该在不了解原因的情况下胡作非为。

当然,相反,我不建议以显式调用 exit 来结束 bash 脚本,除非您的真正意思是“忽略所有先前的退出代码并使用这个退出代码”。因为这就是其他人在查看您的代码时会假设您想要的内容,并且他们会因为您浪费他们的时间试图找出原因而感到恼火,如果您只是死记硬背而不是出于某种原因。

【讨论】:

    猜你喜欢
    • 2014-10-11
    • 2022-12-11
    • 2011-04-24
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 2020-10-29
    相关资源
    最近更新 更多