Ist es möglich, innerhalb eines Shell-Skripts auf den Bildschirm zu schreiben, während STDOUT und STDERR umgeleitet werden?
Ich habe ein Shell-Skript, das ich STDOUT und STDERR erfassen möchte. Das Skript wird möglicherweise eine Stunde oder länger ausgeführt, daher möchte ich gelegentlich Statusmeldungen auf den Bildschirm schreiben, die angezeigt und nicht umgeleitet (nicht erfasst) werden.
Für ein minimales Beispiel habe ich ein Shell-Skript, sagen wir "./myscript.sh":
#!/bin/sh -u
echo "Message A: This writes to STDOUT or wherever '1>' redirects to."
echo "Message B: This writes to STDOUT or wherever '1>' redirects to.">&1
echo "Message C: This writes to STDERR or wherever '2>' redirects to.">/dev/stderr
echo "Message D: This writes to STDERR or wherever '2>' redirects to.">&2
echo "Message E: Write this to 'screen' regardless of (overriding) redirection." #>???
Dann möchte ich zum Beispiel diese Ausgabe sehen, wenn ich das Skript wie folgt ausführe:
[~]# ./myscript.sh > fileout 2> filerr
Message E: Write this to 'screen' regardless of (overriding) redirection.
[~]# ./myscript.sh > /dev/null 2>&1
Message E: Write this to 'screen' regardless of (overriding) redirection.
[~]#
Wenn dies nicht "direkt" möglich ist, ist es möglich, die Umleitung vorübergehend abzubrechen, dann etwas auf den Bildschirm zu drucken und die Umleitung so wiederherzustellen, wie sie war?
Einige Informationen zum Computer:
[~]# uname -srvmpio
Linux 3.2.45 #4 SMP Wed May 15 19:43:53 CDT 2013 x86_64 x86_64 x86_64 GNU/Linux
[~]# ls -l /bin/sh /dev/stdout /dev/stderr
lrwxrwxrwx 1 root root 4 Jul 18 23:18 /bin/sh -> bash
lrwxrwxrwx 1 root root 15 Jun 29 2013 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Jun 29 2013 /dev/stdout -> /proc/self/fd/1
echo msg > /dev/tty
. Das hat funktioniert! Ich war mir sicher, dass ich dies früh ohne Erfolg versucht habe, aber ich muss nur andere ähnliche Dinge ausprobiert haben. Auf jeden Fall funktioniert es bei mir. Wenn Sie dies als Antwort angeben möchten, werde ich es als akzeptiert markieren.
echo msg > /dev/tty