Есть некое выражение
foo | bar. Вывод этого выражения записывается в переменную
name, а код ошибки(выхода) команды
foo записывается в переменную
name_err. По моей дырявой логике все выражение должно иметь вид
name=$( (foo; name_err=$?) | bar ). Но работает только так:
Код: Выделить всё
name=/tmp/foo
foo > $name
name_err=$?
name=$(cat $name | bar)
Это как так? Почему ни
(foo; name_err=$?), ни
{ foo; name_err=$?; } не работет? Причем последнее работает, но только не в
$().
Единственное, что мне гугл
предложил было:
name_err=$( ((foo; echo $? >&3) | bar >&4) 3>&1) 4>&1. Однако внутри
$(), сей хак выдает
$0: 4: Bad file descriptor. Куда он (4-й дескриптор-то) делся?