Ваша первая команда,
( echo foo >&2 ) 2> >(sed 's/^/stderr: /') | sed 's/^/stdout: /'
в упрощенной форме (использование временного файла для хранения данных, созданныхecho
):
{ echo foo 2>file >&2; sed 's/^/stderr: /' file; } | sed 's/^/stdout: /'
То есть первый sed
считывает то, что выдается при стандартной ошибке, из echo
и записывает в стандартный вывод, а второй sed
читает и модифицирует это.
Ваша вторая команда,
( echo foo >&2 ) 2> >(sed 's/^/stderr: /') > >(sed 's/^/stdout: /')
в упрощенной форме,
echo foo 2>file >&2; sed 's/^/stderr: /' file; sed 's/^/stdout: /' </dev/null
Здесь sed
, который получает стандартный вывод ошибки, производит вывод, в то время как другой sed
, который получает стандартный вывод, (который ничего не дает ), не производит никакого вывода (, поскольку он не t не получает никаких входных данных, и поскольку он не вставлял и не добавлял никаких данных ).
Другой способ формулировки:
Первая команда:
( echo foo >&2 ) 2>file
sed 's/^/stderr: /' file | sed 's/^/stdout: /'
Вторая команда:
( echo foo >&2 ) 2>file >otherfile
sed 's/^/stderr: /' file
sed 's/^/stdout: /' otherfile
Короче говоря, второй sed
во второй команде никогда ничего не читает. В частности, он не считывает вывод первой команды sed
, как в первой команде.
Используя чрезвычайно упрощенные символы, первая команда выглядит примерно так
utility-writing-to-stderr 2> >(something1) | something2
где something1
пишет в стандартный вывод, который считывается something2
.
Вторая команда, использующая те же обозначения,
utility-writing-to-stderr 2> >(something1) >(something2)
т.е. something1
и something2
даже не связаны друг с другом, и something2
никак не может прочесть, что something1
производит. Кроме того, поскольку utility-writing-to-stderr
ничего не производит в своем стандартном потоке вывода, something2
не будет ничего читать из своего стандартного ввода.
После дополнительных исследований оказалось, что карта, которая у меня есть, является более старой версией GT 730, которая поддерживается только версией 390.x драйверов nvidia.
Добавление вручную
Option "ModeValidation" "DFP-0: AllowNonEdidModes,NoMaxPClkCheck"
в /etc/X11/xorg.conf приводит только к очень размытой версии этого разрешения.
Я перешел на GT 710 (! ), который поддерживается новыми драйверами nvidia (455.xy и 460.xy ), и теперь все работает.