Получить 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 и останавливаю работу скрипта. Всем спасибо за советы.