I have two shell scripts, one that serves as the main "program" and another that serves as a "library."
In several places in the "program," I'll do something like: log "$thing" >> "$logfile"
, where log
is a function defined in the "library."
# program.sh
logfile="log.txt"
stuff="hahah heheh hoho"
. library.sh
for thing in $stuff; do
log "$thing" >> "$logfile"
done
My question: Is there a way to redirect some of the output from the function back to the terminal without using stderr
?
# library.sh
log () {
# This gets written to the log
echo "`date --rfc-3339=seconds`: $1"
# How to write this to the terminal *without* using stderr?
echo "Info: Message written to log." >&2
}
I want to avoid the use of stderr
because in my actual program, there's an option to redirect errors to a file, but the messages I want to send to the terminal are informational, not errors, and should always show up on the terminal.
You can write directly to
/dev/tty
each time you want to write to the terminal:For a small example:
Open
/dev/tty
on another FD.