我的研究表明Z壳与两个秘密社团有密切联系。当对比输出时,这些联系就会显现出来GNU 使当使用bash
vs.zsh
时我想知道如何配置我的 shell 来挫败针对我的任何狡猾计划。
光明会
这种伙伴关系的目的似乎是将秘密隐藏在众目睽睽之下。考虑以下简单的输出
Makefile
:test: @echo "# header" @echo "line with a hash # in the middle"
如果我在
zsh
shell 中运行它,第一行对我来说是隐藏的。这不是转义哈希的问题,因为(a)只有第一行有问题,(b)将其重定向到文件使其显示正常,此时将cat
文件发送到同一终端显示正常, (c) 如果我从终端复制文本,文本实际上就在那里,它只是显示为黑色。如何停止
zsh
对隐藏秘密消息的输出进行的任何操作,以便我可以根据输出做出完全明智的决策?共济会
这种伙伴关系的目标似乎是尽可能少地发布有关幕后发生的事情的信息。考虑这个简单 Makefile 的输出:
test: for i in $$(seq 1 10); do echo -n "[$$i]"; sleep 1; done
如果我在
zsh
shell 中运行此命令,输出将缓冲在某处,直到到达换行符或完成目标。然后,也只有到那时,任何东西才会返回到终端。这使得长时间运行的作业在工作时实际显示一些内容,但在输出中不包含频繁的换行符,因此很难理解。相比之下,我得到的输出bash
信息要丰富得多。我怎样才能停止任何
zsh
审查输出的行为,直到被迫透露它,以便我可以看到发生了什么?
如果其中任何一个相关,我正在使用 GNU Make 4.2.1、Z shell 5.2,并在 Termite v12 窗口中的 Tmux 2.4 内运行它。我的点文件可用于桀骜,多路复用器和白蚁。
make
另请注意,这些问题似乎与 shell内部运行没有任何关系,因为添加SHELL = bash
到 Makefile 不会改变任何内容。
答案1
通过不使用其目的正是如此的附加组件。
这不是 Z shell 做的;而是 Z shell 做的。也不是 tmux,也不是白蚁。
您已经安装了 Prezto 的附加组件(或类似的组件),其记录的目的是“篡改GNU Make的输出”。附加组件的顶部写着:
# # 突出显示输出。 # # 作者: # 索林·约内斯库 <[电子邮件受保护]> #
正如你所看到的,当你跑步时
进行测试您没有运行实际的程序,而是运行您安装的
make
名为的附加组件。make
反过来,它运行一个名为 的命令colormake
。
做什么呢colormake
?它以其标准输出和标准错误运行make
,而不是终端设备,将它们通过管道传输到 Perl 程序中,该程序一次读取并处理其标准输入一整行。你实际上可以重现你看到的所有效果,在任何 POSIX 兼容 shell 中,通过做同样的事情:
/usr/bin/make 测试 2>&1 | colormake.pl这与 Z shell 无关,而与您安装了替换该
make
命令的插件这一事实有关。
目睹该行一次的行为,无需着色和检测评论等colormake.pl
,在任何 POSIX 兼容 shell 中跑步:
/usr/bin/make 测试 2>&1 | perl -e 'while (<>) { 打印 $_ ; }'
因此,请卸载或禁用您安装的附加组件。
Preztodiff
也取代了命令。