2017-03-05 2 views
1

Ich arbeite an einem Skript, das SSH in Hosts und dann sudo zu einem privilegierten Benutzer. Da unsere Hosts sudo nicht mit Nicht-Tty-Sitzungen zulassen, ist Pseudo-Tty aktiviert.Undo globale STDERR -> STDOUT Umleitung

pseudo-tty leitet automatisch alle STDERR-Ausgaben zu STDOUT um. Dies verursacht eine Reihe von Problemen für das Projekt, da abhängige Bibliotheken die STDERR-Ausgabe nicht gut verarbeiten.

Ist es möglich, die STDERR -> STDOUT Ausgangsumleitung rückgängig zu machen? Mit anderen Worten, ist es möglich, global zu bestimmen, dass alle STDERR-Ausgaben nicht an STDOUT gesendet werden sollen? Ich weiß, dass es möglich ist, auf einer Befehlsbasis zu arbeiten, aber ich suche nach einer Möglichkeit, dies zu tun, die nur einmal ausgeführt werden muss - idealerweise beim Ssh-Befehl an den Host.

Antwort

0

Sie können eine Umleitung nicht "rückgängig machen", aber Sie können woanders umleiten.

Eine "bare" Umleitung in einem Shell-Skript (z. B. 2>/dev/null) auf einer eigenen Zeile wird stdout oder stderr für die Shell selbst umleiten und so wird die Shell für alle zukünftigen Befehle ausgeführt.

+0

Ja können Sie. Sie können die Dateideskriptoren klonen, dann die Einträge 1 und 2 in PDT schließen, die "stdout" und "stderr" entsprechen. Dann fügen Sie die geklonte FD hinzu, die die ersten Einträge in PDT belegt, die nicht verwendet werden. (Frisch geschlossen 1 und 2 Einträge). Ich denke ... –

+0

@TonyTannous: das tut eine neue Umleitung, es macht eine vorherige Umleitung nicht rückgängig. Sie können eine Umleitung nicht rückgängig machen, da das Wissen darüber, wo das fd hingelaufen ist, verloren geht, nachdem es geschlossen wurde. Sie können nur erraten, wohin es gegangen ist und versuchen, es wieder zu öffnen. –

+0

Ok, hab es. Danke :) Ich meinte, du kannst es zum Beispiel für "stdin" und "stdout" "wiederherstellen", da wir wissen, wo sich ihre FD in der PDT befand. Aber ich stimme deinem Kommentar zu. –

Verwandte Themen