Schreiben terminal nach dem umleiten von stdout in eine Datei ohne Verwendung von stderr?
Habe ich zwei shell-Skripte, die eine dient als Haupt - "Programm", und ein anderes, das als "Bibliothek".
In mehreren Orten in der "Programm," das mache ich so etwas wie: log "$thing" >> "$logfile"
, wo log
ist eine Funktion definiert, die in der "Bibliothek".
# program.sh
logfile="log.txt"
stuff="hahah heheh hoho"
. library.sh
for thing in $stuff; do
log "$thing" >> "$logfile"
done
Meine Frage: gibt es eine Möglichkeit die Umleitung einige der Ausgang aus der Funktion zurück zum terminal ohne Verwendung 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
}
Möchte ich vermeiden die Verwendung von stderr
weil in meinem eigentlichen Programm, gibt es eine option zum umleiten von Fehlern in einer Datei, sondern die Nachrichten, die ich senden möchten, um das terminal zu Informationszwecken, keine Fehler, und sollten immer zeigen, bis auf das terminal.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Öffnen
/dev/tty
auf anderen FD.program.sh
anstatt es auszuführen jedes mallog
genannt wird?exec
line-in library.sh, aber gibt es eine höhere Zahl (sagen wir mal 8 oder so) nur für den Fall.123
und das scheint zu funktionieren 🙂/dev/tty
sollte auch funktionieren, wenn Sie nur brauchen, um es zu tun ein paar mal. Ansonsten, der FD wird weniger Tastenanschläge (und leichter zu ersetzen, wenn Sie Sie benötigen, senden Sie es irgendwo anders ist).exec
hat; der Mann-Seite ist schrecklich. Ich werde mich etwas umsehen.man exec
erhalten Sie die falsche Seite.man bash
, und suchen Sie dann nach dem Satzit replaces the shell
. (Suche nachexec
imbash(1)
manpage ist ein schneller Weg auf die Nüsse gehen.)exec
ist ein interner bash-Befehl, nicht ein Programm.exec
shell built-in. (Gut, es nichtbash
bietet auch einehelp
shell-builtin, die Ihnen gefallen könnten:help exec
. Es ist nicht so detailliert wie in der manpage, aber könnte genau das sein, was Sie brauchen, irgendwann. 🙂Können Sie direkt schreiben, um
/dev/tty
jedes mal, wenn Sie wollen, schreiben Sie an das terminal:Für ein kleines Beispiel:
exec
special sauce 🙂exec
special sauce ist ordentlich. 🙂