В bash
это немного сложно:
command 2> >(tee err) 1> >(tee out) | tee >all
Здесь нам нужна подстановка процесса > (... )
и tee
, чтобы обойти проблему. При замене процесса процесс тройник
присоединяется к соответствующему каналу. tee
затем записывает строки в файл , а печатает затем в STDOUT
. Таким образом, после записи в файлы оба STDERR
и STDOUT
будут напечатаны в STDOUT
. В bash
мы не можем использовать несколько перенаправлений одного и того же канала в одной команде. Вот почему нам нужно снова направить этот вывод в tee
, который затем просто распечатает его.
В zsh
(обратите внимание, что должна быть установлена опция MULTIOS
, которая является ошибкой в zsh
):
command >out 2>err &>all