每个终端命令后都出现“管道损坏”

每个终端命令后都出现“管道损坏”

我正在运行 Mac OS X 10.10 (Yosemite)iTerm2噢我的天啊每次运行命令后,即使命令成功,我都会收到“管道损坏”的错误。我该如何排除输出此错误的故障,以便修复它?

答案1

一般来说,如果你运行setopt xtrace会话或开始zsh -x将在执行时打印每个命令及其参数,包括用于设置提示或其他挂钩函数的内部参数。

这可能会产生很多输出,因为哦我的天啊可能会运行相当多的函数只是为了显示提示。它看起来会像这样:

[...]
+__config.git:9> 返回 1
+__tempdirs:1> 模拟 -L zsh
+__tempdirs:2> setopt Extendedglob 复制代码
+__tempdirs:3> setopt nullglob
+__tempdirs:4> 本地 -a 匹配 mbegin 修补
+__tempdirs:5> [[ d == d ]]
+__tempdirs:6> [[ /home/adaephon == (#b)(/tmp/foo/)([^/]##)* ]]
+__tempdirs:10> 返回 1
+xtermtitle:5> 本地'前言=pts/32 adaephon@tau:'
+xtermtitle:6> 本地‘cl=’
[...]

每行都以 的值作为前缀PROMPT4,默认情况下为+%N:%i>%N代表脚本、源文件或函数的名称,%i代表行号。其余部分是命令运行时的内容,即所有替换和扩展之后的内容。

例如:

+__tempdirs:6> [[ /home/adaephon == (#b)(/tmp/foo/)([^/]##)* ]]

指的是某个名为 的脚本或函数的第 6 行__tempdirs。在我的 zsh 配置中查找此行,我发现:

        if [[ $2 = (#b)(/tmp/foo/)([^/]##)* ]]; then

在我的配置__tempdirszsh_directory_name_functions,它是函数列表用于动态目录命名。由于当前工作目录显示为我的正常提示的一部分,因此每次在显示提示之前都会运行它。

在您的情况下,错误消息“管道损坏”将出现在发生错误的行下方。管道命令的元素通常首先逐行打印,然后是输出,但可能会有点复杂:

tau% 设置 xtrace
tau% echo foo | sed 's/o/u/g' | (sed 's/u/a/g' ;回显栏)| sed 's/a/e/g'
+zsh:4> 回显 foo
+zsh:4> sed s/o/u/g
+zsh:4> sed s/u/a/g
+zsh:4> sed s/a/e/g
呼呼
+zsh:4> 回音栏
比特
tau%

相关内容