LINUX.ORG.RU

POSIX shell. pipeline


0

0

Вопрос по коду возврата шелловского конвеера
man sh говорит:
    If the reserved word ! does not precede the pipeline, the exit status is
     the exit status of the last command specified in the pipeline.
Т.е. мы можем узнать код возврата последней команды. Есть ли способ узнать код возврата _каждой_ команды или сразу логическое AND от всех кодов возврата?
Про PIPESTATUS в bash знаю.

/c comefs на что-то намекает...
anonymous

по первому делу какой-то изврат нарисовался
$ ((echo "aaa"; echo "a=$?" 1>&2) | (grep a; echo "b=$?" 1>&2)) 2>/tmp/status
aaa
$ cat /tmp/status
a=0
b=0
$ ((echo "aaa"; echo "a=$?" 1>&2) | (grep b; echo "b=$?" 1>&2)) 2>/tmp/status
$ cat /tmp/status
a=0
b=1


Или тоже самое
$ (echo "aaa"; echo "a=$?" 2>/tmp/status1 1>&2) | (grep b; echo "b=$?" 2>/tmp/status2 1>&2)
$ cat /tmp/status1
a=0
$ cat /tmp/status2
b=1

sdio ★★★★★
()
Ответ на: комментарий от sdio

Идея понятна.Нечто похожее делается в вышеупомянутом pipestatus(бегло посмотрел исходник), только там статусы в env переменных хранятся. Спасибо за ответы.

P.S. странно, что насчет этого нет какой то стандартной фичи(в том же POSIX, например) и приходится городить такие конструкции. Имхо это не такое уж и экзотическое желание - проверять статусы всех команд конвеера.

/c bloking намекает что мне пора уже забаниться O_o

anonymous
()

Может, извратиться в обратную сторону?

prog1 >/tmp/data.$$ && prog2 </tmp/data.$$

alexsaa
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.