題 管道grep在zsh中不起作用


我正在做我總是在Bash做的事情:

set | grep -i path 

而輸出是

Binary file (standard input) matches

怎麼了? grep --help 工作,和 set | more 也有效。


4
2018-05-17 13:45


起源




答案:


做這個:

set > /tmp/zshset

然後打開 /tmp/zshset 在你最喜歡的編輯器中尋找 IFS

每個的默認值 zshparam 手冊頁,是默認空格,製表符,換行符和NUL。最後一個是造成麻煩的。 grep 看到NUL(ascii 0,經常顯示為 ^@)並認為這是一個二進製文件。

可能的解決方案:

  • 將IFS設置為其他值。如果您確實需要NUL是有效的分隔符,這可能會導致問題。
  • 使用 grep -a 正如KeithB(或其等同物)所建議的那樣 --binary-files=text
  • 為自己創建一個使用的新別名 grep -a 為自己節省一點點打字
  • 適應通過其他方式查看您的PATH(例如 env | grep -i pathecho $PATH) - 我認為其他解決方案更簡單

12
2018-05-17 14:14



清晰完整的解釋。謝謝 - 我今天學到了一些東西。 - JRobert
我會排在第+1位。使用你建議的替代品讓我知道更多,所以我現在就會使用它們。我不想亂用不相關的變量只是為了讓命令工作。 - Dan Rosenstark
順便說一下,是的,在TextMate中IFS值看起來並不健康。我會不管它。 - Dan Rosenstark


我不確定發生了什麼,但你可以通過 -a 標記為grep以強制它將其輸入視為文本,而不管它認為是什麼。


2
2018-05-17 13:54



是的,我只是嘗試過 grep --binary-files=text 這有效,但我想知道為什麼這不起作用....謝謝 - Dan Rosenstark


如果你的另一個解決方法 grep 沒有實現 -a 是做:

$ set | cat -v | grep foo

0
2018-04-04 06:18