Unix: задержка отображения stderr
Есть ли способ отобразить сводку ошибок (из stderr
) после подачи заявки?
Например rsync
с "--progress" отображает много данных, в том числе ошибок. Но когда он заканчивается - он просто говорит "были ошибки". Я хочу отобразить все, что было написано в stderr в этом случае, поэтому мне не нужно прокручивать и искать, что именно пошло не так:)
PS Я знаю, как просто написать такую утилиту на C, но я думаю, что могут быть более удобные вещи, о которых я не знаю:)
3 ответа
Скрипт-оболочка для обработки этого:
#!/bin/sh
TMPFILE=$(mktemp)
"$@" 2>$TMPFILE
if [ "$?" != "0" ]; then
cat $TMPFILE
fi
Если вы сохраните это в /usr/local/bin/delaystderr
а также chmod +x /usr/local/bin/delaystderr
, вы должны быть в состоянии работать как delaystderr rsync --progress
, Если процесс завершается без сообщения об ошибке (возвращая ненулевое значение), stderr не будет напечатан; Вы можете удалить строки, начинающиеся с if
а также fi
отключить это поведение, если хотите.
Я не уверен, как тебе будет легче.
(Примечание: я на самом деле не тестировал этот скрипт, поэтому покупатель остерегается и все такое)
Подобно ответу womble, вы можете написать bash-скрипт примерно так:
#!/bin/sh
set -e
TMPFILE=$(mktemp)
exec 2>$TMPFILE
trap 'cat "$TMPFILE"; rm -f "$TMPFILE" exit $?' INT TERM EXIT
command1
command2
command3
и это должно сохранить все, отправленное в stderr для всего скрипта, и вывести его в конце. Как и с ответом Womble, я не проверял это.
Если вы используете bash redirect stderr для stdout, то при необходимости перенаправьте его в файл:
rsync --progress 2> & 1 rsync --progress 2> & 1> file.out