В Bash я использую следующее trap
команда в последней строке моего .bashrc
повторить все команды к строке заголовка.
# trap commands and echo them to xterm titlebar. Must be last line.
trap 'echo -ne "\033]0;$BASH_COMMAND $USER@${HOSTNAME}>$(pwd)\007"' DEBUG
Таким образом, если Вы выполняетесь sleep 10
, Вы будете видеть, что Ваша строка заголовка изменяется на sleep 10
на время команды, после которой это возвратится к user@host>pwd
.
Вы попробовали это?
rsync -av blah blah 2>&1|perl -e "while(<>){s/^/`date` /g; print;}" >>logfile
Это добавит дату и некоторые пробелы к началу строки.
Wiki Greg имеет запись при добавлении меток времени к каждой строке потока, который покрывает несколько методов, в зависимости от Вашей среды. Они все сводятся к передаче по каналу потока через цикл/процесс, который добавляет в метках времени; совместимая POSIX версия:
while IFS= read -r line; do
echo "$(date +%Y%m%d-%H:%M:%S) $line"
done
Я знаю, что это были больше чем 3 месяца, с тех пор как я задал этот вопрос, но я думал, что будет хорошо показать то, что я закончил тем, что делал в своем сценарии оболочки.
Как я описал, я должен был так или иначе поймать stderr, чтобы управлять им в файле журнала, например, добавить метку времени. Я смог сделать это использование файлы и с тем, что предложенный Patrick, но я хотел сохранить его максимально простым.
Так, это - то, как я разработал его:
if ! result=$(command_that_will_produce_errors 2>&1 1>/dev/null)
then
echo "There was an error on $(date): $result" >> logfile
else
echo "Command executed successfully on $(date)" >> logfile
fi