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