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
Это потому, что код выхода канала является кодом выхода последнего этапа канала, и тройник никогда не дает сбоев :)
Это можно решить разными способами в зависимости от вашей оболочки. https://unix.stackexchange.com/questions/14270/get-exit-status-of-process-thats-piped-to-another собирает множество ответов.