"Трубный stderr, а не stdout" не работает в Zsh - PullRequest
0 голосов
/ 20 сентября 2019

Как передать stderr, а не stdout? точно отражает мою проблему, и первый ответ - именно то, как я изначально пытался ее решить:

(echo stdout; echo 1>&2 stderr) 2>&1 >/dev/null | less

(команда subshellс echos это минимальный заполнитель, благодаря user1934428, чтобы продемонстрировать проблему; моя настоящая проблема имеет более полезную команду, но такую, которую все остальные не могут запустить.)

Однако она не работает: она показываетоба stdout и stderr вместе.Если я удаляю трубу, она работает как положено, показывая только stderr.В конце концов я понял, что это может быть оболочкой, и попробовал bash: там все отлично работало.Я использую Zsh: как насчет Zsh делает это сбой?

1 Ответ

1 голос
/ 20 сентября 2019

Оба ведут себя одинаково для меня, в том смысле, что они показывают только stderr.

Для тестирования я создал команду, которая выводит в stdout и stderr и работает одинаково в Zsh и bash:

(echo stdout; echo 1>&2 stderr)

печатает

stdout
stderr

Теперь я делаю ваше перенаправление:

 (echo stdout; echo 1>&2 stderr) 2>&1 >/dev/null

Здесь я вижу на bash и zsh

stderr

но, конечно, записывается в стандартный вывод, потому что 2>&1 сначала перенаправляет stderr команды на тот, который в данный момент является стандартным выводом, а затем отбрасывает стандартный вывод команды.

...