LINUX.ORG.RU

[bash] редирект stdout/stderr


0

1

Всем привет, допустим у меня есть скрипт на bash

cmd1 
cmd2
#...
cmdN

Я хочу вывод перенаправлять в лог, но не хочу это явно писать в каждой строчке типа:

cmd1 &> $LOG
cmd2 &> $LOG
#....

Можно как-то сделать что-то вроде freopen() ? Чтобы все последующие команды автоматом перенаправляли свой вывод, куда мне надо? При этом надо периодически показывать echo пользователю, то есть хочется что-то вроде

echo "Doing stuff1"
redirect_output_to_log
do_stuff1
restore_output
echo "stuff1 done"
echo "doing stuff2"
redirect_output_to_log
do_stuff2
#...

Пока что есть идея пройтись sed'ом/perl'ом по скрипту и в каждой строчке, которая не вида «^echo», или «^\w=\w$», добавлять в конец &>$LOG, но это как-то некрасиво.

Возможно в баше есть какие-то глобальные встроенные переменные, которым можно делать set/unset?

☆☆☆☆☆

Ответ на: комментарий от AptGet

Спасибо!

[del@del-arch bash]$ cat kk.sh 
exec 3>&1
exec &> log.txt
echo -n "This line "
echo "is complete" 1>&2
exec 1>&3 3>&-
echo "test complete"
[del@del-arch bash]$ sh kk.sh 
test complete
[del@del-arch bash]$ cat log.txt 
This line is complete
[del@del-arch bash]$ 
DELIRIUM ☆☆☆☆☆ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.