我的 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
也许是函数之外的杂散?