Команда, которая возвращает код выхода, все еще возвращает 0 при использовании «команды 2 > & 1 | tee -a /var/log/file.log

I ' m запускает сценарий, который выполняет команду и сохраняет вывод в файл в / var / log. После этого он получает код выхода и выполняет другую команду на основе условия if / else. Проблема: 2> & 1 | tee -a /var/log/file.log всегда возвращает 0, независимо от реального кода выхода из команды.

Как обойти эту проблему?

Часть кода:

rdiff-backup --force /localdir external.domain"::/backups/externaldir 2>&1 | tee -a /var/log/file.log
e="$(echo $?)"
if [ "$e" == "0" ]; then
        echo "`date` Done." 2>&1 | tee -a /var/log/file.log
else
        echo "`date` Fail!" 2>&1 | tee -a /var/log/file.log            
fi
-1
задан 18 October 2018 в 18:16
1 ответ

Это потому, что код выхода канала является кодом выхода последнего этапа канала, и тройник никогда не дает сбоев :)

Это можно решить разными способами в зависимости от вашей оболочки. https://unix.stackexchange.com/questions/14270/get-exit-status-of-process-thats-piped-to-another собирает множество ответов.

1
ответ дан 5 December 2019 в 19:40

Теги

Похожие вопросы