Using exec and tee to redirect logs to stdout and a log file in the same time
Use process substitution with &
redirection and exec
:
exec &> >(tee -a "$log_file")
echo "This will be logged to the file and to the screen"
$log_file
will contain the output of the script and any subprocesses, and the output will also be printed to the screen.
>(...)
starts the process...
and returns a file representing its standard input.exec &> ...
redirects both standard output and standard error into...
for the remainder of the script (use justexec > ...
for stdout only).tee -a
appends its standard input to the file, and also prints it to the screen.
exec >> $log_file 2>&1 && tail $log_file