Да - ваша стандартная ошибка отправляется на стандартный вывод. Это то, что вы просили, чтобы это произошло.
Ваш сценарий exec 2> >(…)
повторяется на stdout
, поэтому сценарий exec > >(…)
тоже может это увидеть - поэтому у вас есть и теги stdout
и stderr
в строке вывода cholo
.
Пересмотрите ваш скрипт (bash17.sh
) до:
exec > >( while read line; do echo " stdout: $line"; done )
exec 2> >( while read line; do echo " stderr: $line"; done >&2 )
echo "rolo"
echo "cholo" >&2
так что стандартная ошибка переходит к стандартной ошибке, и вы видите:
$ bash bash17.sh
stdout: rolo
stderr: cholo
$ bash bash17.sh > /dev/null
stderr: cholo
$ bash bash17.sh 2> /dev/null
stdout: rolo
$
Очевидно, что для получения стандартной ошибки в файле вы должны использовать альтернативное перенаправление внутри компонента exec 2> >(…)
скрипта.