~/.profile
当我使用 Bash 时,我喜欢使用突出的调试模式,因此每次我获得一台新机器时,我都会添加到代码末尾set -x
。
eu
我也考虑添加,因此将其set -eux
作为“最佳实践”。
如果我理解的话BR手册正确地
e
给我带来了不执行代码的好处,这些代码最终会返回非零(通常是错误的)输出。u
- 我不太明白,那人说:
执行参数扩展时,将除特殊参数“@”或“*”之外的未设置变量和参数视为错误。错误消息将写入标准错误,并且非交互式 shell 将退出。
在我看来,这听起来很像,e
但也将未设置的变量视为导致错误的变量,并以非零值退出。
对于寻求最佳“典型”调试的人来说,我在这里的理解是否准确,并且set -eux
比一般情况更好?set -x
答案1
这是一个见仁见智的问题,但我认为set -eu
对于交互式使用来说这是一个坏主意。以下是每个人所做的事情:
在交互式 shell 中,这意味着命令中的任何错误都会导致 shell 退出!例如,命令名称中的拼写错误,或者rm
文件名不正确,或者echo $blah
变量名称不正确......
set -e
在编写 shell 脚本时很有set -u
用。特别是,set -e
可以避免复合错误:一旦命令失败,脚本就会退出,这可以避免后续命令未在其期望的上下文中运行的麻烦。
与您的解释相比,请注意,这-e
并不能保护您执行返回非零状态的代码;必须执行该命令才能返回非零状态。