Antworten:
Scheint eine wirklich schlechte Idee zu sein, und ich bezweifle, dass das System eine Möglichkeit bietet, dies zu tun.
Wann immer ein Prozess erstellt wird, bestimmt der aufrufende Prozess, wohin seine Befehle stdin, stdout und stderr geleitet werden. Es müsste einen allgemeinen Weg geben, dies zu überschreiben - und es würde alle Mechanismen aufheben, die stderr explizit umleiten.
Wenn Sie beispielsweise Folgendes eingeben:
some_command >some_command.out 2>some_command.err
sollte some_command
gehe zu some_command.err
, oder zu /dev/tty12
?
Das Nächste, was ich mir vorstellen kann, ist, eine Shell mit ihrem umgeleiteten stderr aufzurufen:
bash -l 2>/dev/tty12
In meinen (kurzen) Experimenten (Umleiten zu einer Datei statt zu einem tty) bewirkt dies, dass die Shell nicht interaktiv ist. Hinzufügen -i
zwingt es, interaktiv zu sein - aber die Shell-Eingabeaufforderung wird anscheinend nach stderr gedruckt.
Natürlich können Sie stderr für einzelne Befehle umleiten (vorausgesetzt, Sie verwenden keine csh
oder tcsh
):
some_command 2>some_command.err
und Sie könnten eine Shell-Funktion definieren, die dies für Sie erledigt:
e() { "$@" 2>/dev/tty12 ; }
Stellen Sie dann für jeden Befehl, dessen Stderr umgeleitet werden soll, einfach das Zeichen voran e
zum Befehl:
e some_command