为什么 bash 打印退出,即使它没有退出 - 这是一个错误吗?

为什么 bash 打印退出,即使它没有退出 - 这是一个错误吗?

使用零个或一个数字参数退出,例如exitexit 42打印“exit”并退出 shell。

exit 使用无效参数,例如exit hello打印错误消息、打印“exit”并退出 shell,并返回值 255。

例如,管道中的 exitexit | cat | exit不会打印“exit”,并且该命令的返回值取决于我们使用的 bash 版本。这不会退出 shell。

exit 带有多个参数,例如exit 1 2 3打印错误消息、打印“exit”但不退出 shell。

这意味着有时 bash 会打印“exit”而不实际退出,这可能会非常令人困惑。这是一个错误还是出于某种原因这有意义?

答案1

Bash 在即将退出非登录 shell 时打印“exit”,在即将退出登录 shell 时打印“logout”(或所用语言环境中的等效内容)。因此,我猜想打印此消息正是为了从用户的角度区分这两种情况(当您从远程系统的 ssh 会话注销并返回到本地系统时,这样的信息可能会有所帮助,如果您的系统提示符不包含主机名)。

您提到的情况 ( exit 1 2 3),其中 bash 打印“exit”但不退出(而是打印一条错误消息,我认为打印“退出”)应该被视为设计错误。exit应该在打印“exit”或“logout”之前解析参数并打印可选的错误消息。仅当参数检查成功时才应打印后者。如果您认为这令人困惑,您可以提交错误。

相关内容