Так вот что я думаю, что вы хотите сделать.
Чтобы сохранить выход на стандартный вывод, но и перейти в файл
long_proc(){
exec 4>&1
#redirect fd4(currently nothing hopefully) to stdout
exec 1>&3
#redirect stdout to fd3(also hopefully unused)
#Note you have 5 more to choose from if they are in use.
echo Just log
#script1 that generate output1
echo Log and Stdout | tee >(cat - >&4)
#script1 that generate output2
# Tee into a subproc to cat data into fd4 pointing to stdout
#The tee'd data also goes to fd3
exec 1>&4
# set fd1 back to stdout
exec 4>&-
#close fd4
}
long_proc 3> log
#Send fd3 to log, stdout is untouched and does whatever you want.
Так перенаправить весь вывод FD3, который затем все поступает в журнал. Тройник в stdout все, что вы хотите также быть в стандартном режиме.
Преимущество этого в том, что вы можете затем трубы как
long_proc 3> log | sed 's/^/Piped and /'
'long_proc> /tmp/debug.log 2> & 1 '? – Cyrus
Используйте команду tee – 123
@cyrus, она выведет полный журнал в файл, а также stdout, не так ли? Но мое требование - это нечто другое. вывод некоторой команды должен быть перенаправлен в stdout. – shafeeq