在 Bash 配置文件中设置 -eux 而不是设置 -x 以进行全局调试

在 Bash 配置文件中设置 -eux 而不是设置 -x 以进行全局调试

~/.profile当我使用 Bash 时,我喜欢使用突出的调试模式,因此每次我获得一台新机器时,我都会添加到代码末尾set -x

eu我也考虑添加,因此将其set -eux作为“最佳实践”。

如果我理解的话BR手册正确地

  1. e给我带来了不执行代码的好处,这些代码最终会返回非零(通常是错误的)输出。
  2. u- 我不太明白,那人说:

执行参数扩展时,将除特殊参数“@”或“*”之外的未设置变量和参数视为错误。错误消息将写入标准错误,并且非交互式 shell 将退出。

在我看来,这听起来很像,e但也将未设置的变量视为导致错误的变量,并以非零值退出。

对于寻求最佳“典型”调试的人来说,我在这里的理解是否准确,并且set -eux比一般情况更好?set -x

答案1

这是一个见仁见智的问题,但我认为set -eu对于交互式使用来说这是一个坏主意。以下是每个人所做的事情:

  • set -e每当出现以下情况时都会导致 shell 退出管道,列表, 或者复合命令以非零状态退出;
  • set -u每当 shell 尝试扩展未定义的参数时,都会导致 shell 退出。

在交互式 shell 中,这意味着命令中的任何错误都会导致 shell 退出!例如,命令名称中的拼写错误,或者rm文件名不正确,或者echo $blah变量名称不正确......

set -e在编写 shell 脚本时很有set -u用。特别是,set -e可以避免复合错误:一旦命令失败,脚本就会退出,这可以避免后续命令未在其期望的上下文中运行的麻烦。

与您的解释相比,请注意,这-e并不能保护您执行返回非零状态的代码;必须执行该命令才能返回非零状态。

相关内容