Em primeiro lugar, essa função registrará apenas a primeira "palavra" de qualquer coisa enviada a ela, já que você usa $1
em vez de "$*"
.
Em segundo lugar, há (como é o caso do POSIX) uma infinidade de maneiras de fazer esse tipo de coisa. Eu provavelmente iria com algo como:
log() {
cat - >> "$logfile"
}
do_stuff | log
Mas você também pode:
(
do_stuff
do_more_stuff
) >> "$logfile"
Como para suprimir completamente toda a saída - isso é algo que geralmente é melhor deixar para o ambiente de chamada (por exemplo, ./thing 1> /dev/null 2> &1
) em vez de bloqueá-la "no código", por assim dizer. Dito isto:
squashout="true" # comment this out to stop killing output
if ! [[ "true" = "${squashout-false}" ]]; then
# Redirect stdout and stderr to the null device.
exec 1> /dev/null
exec 2> /dev/null
fi