在 zsh 中,到 grep 的管道不起作用

在 zsh 中,到 grep 的管道不起作用

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

set | grep -i path 

输出为

Binary file (standard input) matches

有什么问题?grep --help可以工作,也set | more可以工作。

答案1

做这个:

set > /tmp/zshset

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

根据手册页,其默认值为zshparam默认空格、制表符、换行符和 NUL。最后一个是问题所在。grep看到 NUL(ascii 0,通常显示为^@)并认为这是一个二进制文件。

可能的解决方案:

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

答案2

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

答案3

如果您grep没有实施,另一个解决方法-a是执行以下操作:

$ set | cat -v | grep foo

相关内容