Задать вопрос

Выхлоп bash скрипта на экран и в лог?

Какой _правильный_ способ делать выхлоп баш скрипта запускаемого руакми на экран и в лог файл? Делаю по своему (опишу ниже), но какой способ кошерный?


Кусок кода как это делаю я сейчас:
slog=/yyy/zzz/xxx.log

function main
{

echo "code here"

}

main 2>&1 | tee -a $slog
  • Вопрос задан
  • 17296 просмотров
Подписаться 6 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 6
ob1
@ob1
Вот Вам более интересный вариант. Кладёте следующий файл куда-нибудь, например, в /etc/functions/teebash:

if [ "s"${TBASHLOG__} = "s" ] ; then
    TBASHLOG__="/tmp/tbash.log"
fi

if [ ! ${TEEBASH__} ] ; then
    TEEBASH__=1
    . $0 "$@" | tee -a ${TBASHLOG__}
    exit $?
fi


В скрипт первой исполняемой строчкой ставьте:

. /etc/functions/teebash


Ниже пример скрипта, на котором я это проверял:

#!/bin/sh

#TBASHLOG__=/tmp/tbash2.log

. /etc/functions/teebash

echo `date` Is teebash working fine?


Вообще-то, код из первого листинга можно просто воткнуть в начало любого скрипта. Но получится не так изящно, не так ли? ;-}
Ответ написан
Комментировать
@bdmalex
Если я вас правильно понял, то:

tee — команда, выводит на экран, или же перенаправляет, выходной материал команды и копирует его в файл или в переменную.
Ответ написан
icc
@icc
Вот так пробуйте: bash -x ./script.sh 2>&1 | tee script.log
Ответ написан
ob1
@ob1
Bodik, нормальный у Вас способ, если это нужно разово сделать в одном скрипте. Если таких скриптов много, то я бы предложил сделать дополнительный скрипт /bin/bashtee, например:

#!/bin/sh

. "$@" | tee -a /var/lob/bashtee.log


Можно и хитрее сделать, но надо ли?
Ответ написан
Комментировать
@Bodik Автор вопроса
Всем спасибо! Остаюсь при своем варианте.
Ответ написан
Комментировать
@haegor
А вообще есть такая утилита как logger, которая отправляет syslog сообщения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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