4

Я делаю то, что я всегда делаю в Bash:

set | grep -i path 

и вывод

Binary file (standard input) matches

В чем дело? grep --help работает и set | more работает тоже.

3 ответа3

12

Сделай это:

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 path , echo $PATH) - я думаю, что другие решения проще
2

Я не уверен, что происходит, но вы можете передать флаг -a в grep, чтобы заставить его воспринимать ввод как текст, независимо от того, что он думает, что это так.

0

Другой обходной путь, если ваш grep не реализует -a , должен сделать:

$ set | cat -v | grep foo

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .