管道到 grep 在 zsh 中不起作用

Dan*_*ark 5 zsh macos

我正在做一些我在 Bash 中经常做的事情:

set | grep -i path 
Run Code Online (Sandbox Code Playgroud)

输出是

Binary file (standard input) matches
Run Code Online (Sandbox Code Playgroud)

怎么了?grep --help有效,也set | more有效。

Dou*_*ris 12

做这个:

set > /tmp/zshset
Run Code Online (Sandbox Code Playgroud)

然后/tmp/zshset在您喜欢的编辑器中打开。寻找IFS.

根据zshparam手册页,此操作的默认值是默认空格、制表符、换行符和 NUL。这最后一个造成了麻烦。grep看到 NUL(ascii 0,经常显示为^@)并认为这是一个二进制文件。

可能的解决方案:

  • 将 IFS 设置为其他值。如果您执行其他操作期望 NUL 是有效的分隔符,则这可能会导致问题。
  • grep -a按照 KeithB 的建议使用(或等效的--binary-files=text
  • 为自己创建一个新别名,用于grep -a节省一点打字时间
  • 适应通过其他方式(例如env | grep -i pathecho $PATH)查看您的 PATH - 我认为其他解决方案更简单


Kei*_*thB 2

我不确定发生了什么,但您可以将标志传递-a给 grep 以强制其将其输入视为文本,无论它认为它是什么。