使用零个或一个数字参数退出,例如exit
或exit 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”之前解析参数并打印可选的错误消息。仅当参数检查成功时才应打印后者。如果您认为这令人困惑,您可以提交错误。