Mam dwa skrypty powłoki, jeden, który służy jako główny "program", a drugi służy jako "biblioteka".Zapis do terminalu po przekierowaniu stdout do pliku bez użycia stderr?
W kilku miejscach w "programie" zrobię coś takiego: log "$thing" >> "$logfile"
, gdzie log
jest funkcją zdefiniowaną w "bibliotece".
# program.sh
logfile="log.txt"
stuff="hahah heheh hoho"
. library.sh
for thing in $stuff; do
log "$thing" >> "$logfile"
done
Moje pytanie: Czy istnieje sposób aby przekierować trochę wyjścia z funkcji z powrotem do terminalu bez użyciu 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
}
chcę uniknąć używania stderr
bo w moim aktualnego programu, nie ma opcji, aby przekierować błędów do pliku, ale wiadomości chcę wysłać do terminalu są informacyjnych, a nie błędy i powinien zawsze pojawi się na terminalu.
ciekawe ... może Pan wyjaśnić, co się dzieje ? Jaki jest sens pierwszych trzech linii? Wygląda na to, że działa dobrze tylko z dwoma ostatnimi. I, przypuszczam, powinienem umieścić czwartą linię w 'program.sh' zamiast wykonywać ją za każdym razem, gdy wywoływany jest' log'? –
Pierwsze trzy linie pokazują, że oryginalne deskryptory są teraz bezużyteczne. Jest to łatwe do opanowania dla bardziej skomplikowanego programu. – sarnold
Pierwsze trzy to pokazanie, że skrypt nie ma żadnego innego sposobu mówienia na zewnątrz (np. Jest zajęty robieniem innych rzeczy). Wstawiłbym wiersz 'exec' w bibliotece.sh, ale na wszelki wypadek nadaj mu większą liczbę (powiedzmy 8 lub więcej). –