понеділок, 14 грудня 2009 р.

Помилка і tee в конвеєрі

Чергове “прозріння” граблями в лоб не забарилося. Ситуація, як у M$ Windows: на екрані повідомлення про успішне завершення, а насправді жодних зрушень. Як виявилося, причиною стали наступні рядки у скрипті:

long_operation 2>&1 | tee /var/log/long_operation.log
[[ $? -eq 0 ]] && echo "Succeeded"

Якщо виконання “довгої операції” закінчується невдало, то tee сумлінно приховає цей факт, і в будь-якому випадку з’явиться повідомлення про успіх. Отже, таке шоу краще влаштовувати по-іншому:

long_operation >(tee /var/log/long_operation.log) 2>&1
[[ $? -eq 0 ]] && echo "Succeeded"

UPD

Несподівано ікнулося, що це працює не завжди. Тепер використовуємо ${PIPESTATUS[0]}.

Немає коментарів:

Дописати коментар