我正在做一些我在 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 path
)echo $PATH
——我认为其他解决方案更简单
答案2
我不确定发生了什么,但你可以将标志传递-a
给 grep 以强制它将其输入视为文本,无论它认为它是什么。
答案3
如果您grep
没有实施,另一个解决方法-a
是执行以下操作:
$ set | cat -v | grep foo