конвейер и код возврата команды

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

конвейер и код возврата команды

Сообщение Bizdelnick »

Имеется конвейер вида command | sed [...] | dialog --gauge [...]. Каким образом можно проверить код возврата command?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5289
ОС: Gentoo

Re: конвейер и код возврата команды

Сообщение /dev/random »

Обычно в bash пайплайн возвращает статус самой правой команды. Если же включить опцию pipefail (set -o pipefail), то будет возвращаться статус самой правой из _завершившихся с ошибкой_ команд. Если и sed, и dialog здесь отработают успешно, то будет возвращён статус command.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: конвейер и код возврата команды

Сообщение Bizdelnick »

/dev/random писал(а):
21.02.2014 10:39
Если же включить опцию pipefail (set -o pipefail), то будет возвращаться статус самой правой из _завершившихся с ошибкой_ команд.

Спасибо, в bash действительно работает. А более универсалного способа нет? В данном случае желательно было бы использовать dash.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5289
ОС: Gentoo

Re: конвейер и код возврата команды

Сообщение /dev/random »

Bizdelnick писал(а):
21.02.2014 10:50
А более универсалного способа нет? В данном случае желательно было бы использовать dash.

"Встроенного" способа в dash нет. Но, в принципе, можно сохранить статус в файл и затем прочитать:
{ command; echo $? > tmpfile; } | sed ... | dialog ...
status=$(cat tmpfile)
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: конвейер и код возврата команды

Сообщение Bizdelnick »

Ясно, спасибо.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: конвейер и код возврата команды

Сообщение SLEDopit »

в bash ещё есть массив PIPESTATUS:

Код: Выделить всё

 $ echo 1 | tr 1 2 | dfjksl | echo
-bash: dfjksl: command not found

 $ echo ${PIPESTATUS[*]}
0 0 127 0
В dash, такого, правда нет.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: конвейер и код возврата команды

Сообщение Bizdelnick »

SLEDopit
Спасибо, это я уже нагуглил.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: конвейер и код возврата команды

Сообщение drBatty »

Bizdelnick писал(а):
21.02.2014 10:32
Каким образом можно проверить код возврата command?

никаким. Можно вот так посмотреть:

Shell

$ ( /bin/false; echo $? ) | ( cat; /bin/sleep 1 ) 1


дело в том, что команды одновременно выполняются, и код возврата левой будет потерян.
Bizdelnick писал(а):
21.02.2014 10:50
А более универсалного способа нет? В данном случае желательно было бы использовать dash.

а использование конвейера обязательно?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Ответить