Tengo dos scripts de shell, uno que sirve como el "programa" principal y otro que sirve como "biblioteca".Escribir en el terminal después de redirigir la salida estándar a un archivo sin usar stderr?
En varios lugares del "programa", haré algo como: log "$thing" >> "$logfile"
, donde log
es una función definida en la "biblioteca".
# program.sh
logfile="log.txt"
stuff="hahah heheh hoho"
. library.sh
for thing in $stuff; do
log "$thing" >> "$logfile"
done
Mi pregunta: ¿Hay una manera de reorientar algunos de la salida de la función de vuelta al terminal sin usando 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
}
quiero evitar el uso de stderr
porque en mi programa real, hay una opción para redirigir los errores a un archivo, pero los mensajes que desea enviar al terminal son informativas, no errores, y debe siempre aparecer en la terminal.
interesante ... ¿Puede usted explicar lo que está sucediendo ? ¿Cuál es el sentido de las primeras tres líneas? Parece que funciona bien solo con los dos últimos. Y, supongo que debería poner la cuarta línea en 'program.sh' en lugar de ejecutarla cada vez que se llame' log'. –
Las primeras tres líneas demuestran que los descriptores originales ahora son inútiles. Es un sustituto fácil para un programa más complicado. – sarnold
Los primeros tres son para mostrar que el script no tiene otra forma de hablar con el exterior (por ejemplo, están ocupados haciendo otras cosas). Colocaría la línea 'exec' en library.sh, pero le daría un número más alto (digamos, 8 o más) por si acaso. –