zsh: стандартная ошибка, не перенаправляется

#zsh

#zsh

Вопрос:

Я создал пустой director для тестирования

 $ mkdir test

$ cd test

$ grep da *
zsh: no matches found: *
  

Теперь я пытаюсь перенаправить ошибку zsh: no matches found: * в файл. (моя цель только для тестирования и понимания, пожалуйста, не спрашивайте, что и почему я хочу это сделать)

 $ grep da * 2> grep-errors.txt
zsh: no matches found: *
  

Теперь ошибка все еще видна

 $ ls -al   
total 60
drwxr-xr-x   2 test users  4096 Mar  2 20:18 .
drwxr-xr-x 117 test users 53248 Mar  2 20:25 ..
  

файл grep-errors.txt не создан

Итак, что здесь происходит, может кто-нибудь объяснить. почему ошибки не перенаправляются в файл.

Комментарии:

1. Потому что вы перенаправляете вывод ошибки из grep , но grep даже не выполняется. Сообщение об ошибке получено из вашей командной оболочки, которая на данный момент все еще пытается (и терпит неудачу) создать командную строку.

2. Кроме того, в этой ошибке четко указано, что вы используете zsh, а не bash.

3. извините, zsh — это оболочка, которую я использую.

Ответ №1:

Перенаправление применяется только к grep , но оно zsh само по себе выдает эту ошибку, когда * не распространяется ни на какие соответствующие файлы, перед grep каким-либо запуском или даже перед zsh попыткой обработать перенаправление.

Одним из обходных путей является отключение NOMATCH опции, чтобы она * передавалась в grep буквальном смысле. Затем grep запустится и выдаст ошибку ( grep: *: No such file or directory ), которая будет записана в файл.

 % setopt NO_NOMATCH
% grep da * 2> grep-errors.txt
% cat grep-errors.txt
grep: *: No such file or directory
  

Комментарии:

1. Итак, есть ли какой-либо способ перенаправить ошибки zsh или bash

2. Да, но вам лучше устранить проблему, чем регистрировать ошибки. Пусть вызывающий ваш скрипт перенаправляет стандартные ошибки оболочки, если они не хотят их видеть (или если они хотят их сохранить).