Ho due script di shell, uno che funge da "programma" principale e un altro che funge da "libreria".Scrive sul terminale dopo aver reindirizzato lo stdout in un file senza utilizzare stderr?
In diversi punti del "programma", farò qualcosa tipo: log "$thing" >> "$logfile"
, dove log
è una funzione definita nella "libreria".
# program.sh
logfile="log.txt"
stuff="hahah heheh hoho"
. library.sh
for thing in $stuff; do
log "$thing" >> "$logfile"
done
La mia domanda: C'è un modo per reindirizzare alcuni dell'uscita dalla funzione di nuovo al terminale senza utilizzare 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
}
voglio evitare l'uso di stderr
perché nel mio programma vero e proprio, c'è un'opzione per reindirizzare gli errori in un file, ma i messaggi che voglio inviare al terminale sono informativo, non gli errori, e deve sempre presentarsi sul terminale.
interessante ... ci può spiegare cosa sta succedendo ? Inoltre, qual è il punto delle prime tre linee? Sembra funzionare bene solo con gli ultimi due. E, suppongo che dovrei mettere la quarta riga in 'program.sh' piuttosto che eseguirla ogni volta che viene chiamato' log'? –
Le prime tre righe dimostrano solo che i descrittori originali sono ora inutili. È un facile supporto per un programma più complicato. – sarnold
I primi tre mostrano che lo script non ha altro modo di parlare all'esterno (ad es. Sono occupati a fare altre cose). Metterei la riga 'exec' in library.sh, ma dargli un numero più alto (ad esempio, 8 o giù di lì) per ogni evenienza. –