Получить return code от программы вначале конвейера

Есть программа pg_basebackup которая перенаправляет свой stdout в stdin другой программы (архиватор).

Если выполнить запрос return code в конце, то получим результат работы pigz

pg_basebackup -d postgres:[email protected] -D - -Ft -Xf -P -l backup | pigz -9 > /var/backups/backup.tar.gz | echo $?"

Вопрос как получить return code от pg_basebackup, используя Bash?


Ответы (2 шт):

Автор решения: Ainar-G

В обычном sh это сделать сложно. В bash же есть массив PIPESTATUS, из которого можно достать нужные значения:

#!/usr/bin/env bash

( exit 7 ) | ( exit 2 )

echo "first: ${PIPESTATUS[0]}, second: ${PIPESTATUS[1]}"
# Output:
#
#   first: 7, second: 2
→ Ссылка
Автор решения: LostCluster

В моем конкретном случае разницы нет кто сломался в конвейере, поэтому set -eo pipefail; в начале для меня вполне подходит. Как только кто-то ломается в конвейере я получаю return и останавливаю работу скрипта. Всем спасибо за советы.

→ Ссылка