调试我的 zsh 启动脚本中的错误

调试我的 zsh 启动脚本中的错误

我的 zsh 终端以错误代码开头,如echo $?is 1。这实际上并没有造成任何问题,但它只是让我烦恼。我本以为我的各种启动脚本中的命令会包含在 中history,但事实并非如此;history似乎只显示用户输入的命令。

调试这种情况的好方法是什么?

答案1

要了解启动脚本或任何其他 shell 脚本的作用,请将其放在set -x开头或您想要了解的部分之前。这会导致 shell 跟踪它运行的每个命令,即在执行之前将每个命令打印到标准错误。要关闭跟踪(如果您只想跟踪脚本的一部分 - 可能对您没有用),请运行set -x.

您还可以通过运行以跟踪模式启动 zsh zsh -x。 (如果问题仅在终端模拟器直接运行 zsh 时发生,例如,如果您在设置环境变量之前依赖环境变量,则这可能不会在您的特定情况下重现该问题。)

set -x在标准错误上打印痕迹。您可以通过运行将其重定向到文件zsh -x 2>zsh.log,或者暂时使用

exec 2>zsh.log; set -x
… # stuff you want to trace
set +x; exec 2>/dev/tty

这会导致标准错误不是终端,这可能会破坏某些插件。如果是这样,请script -c 'zsh -x'改为运行。这会将所有内容记录到名为 的文件中typescript,但 zsh 仍然连接到终端。


使用 true(成功地不执行任何操作的程序)作为文件的最后一行。 – 沃尔特纳

@waltinator 这是一个好主意,但它不起作用。

return也许是函数之外的杂散?

相关内容