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