#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. Да, но вам лучше устранить проблему, чем регистрировать ошибки. Пусть вызывающий ваш скрипт перенаправляет стандартные ошибки оболочки, если они не хотят их видеть (или если они хотят их сохранить).