Wie die Umleitung von stdout, stderr wieder auf /dev/tty
Ich nur ssh-ed auf einige remote-server und festgestellt, dass stdout
und stderr
alle Befehle/Prozessen, die ich versuche zu laufen in der bash wird umgeleitet irgendwo.
Also, ich habe folgende Fragen
Zu erkennen, wie:
1) Die Datei stdout
, stderr
nicht umgeleitet in Linux?
und
2) Und wie die Umleitung von Standard - stdout
und stderr
wieder zu /dev/tty?
Vielen Dank im Voraus.
Wie haben Sie das herausfinden?
nur die Eingabe von Befehlen, sollte die Ausgabe auf STDOUT und STDERR.
Da ist alles relevante in .bashrc?
NÖ, alles und überall scheint ganz so standart ec2 ubuntu-Instanz(es ist die ec2-Instanz, btw).
können Sie Bearbeiten Sie Ihre post, um eine kurze use-case, der zeigt, log-in per ssh ein Kommando auszuführen, das sollte einen Fehler, und eine cmd-das sollte eine Ausgabe zu produzieren (und zählen jede Ausgabe, die nicht vorkommt)? Viel Glück.
nur die Eingabe von Befehlen, sollte die Ausgabe auf STDOUT und STDERR.
Da ist alles relevante in .bashrc?
NÖ, alles und überall scheint ganz so standart ec2 ubuntu-Instanz(es ist die ec2-Instanz, btw).
können Sie Bearbeiten Sie Ihre post, um eine kurze use-case, der zeigt, log-in per ssh ein Kommando auszuführen, das sollte einen Fehler, und eine cmd-das sollte eine Ausgabe zu produzieren (und zählen jede Ausgabe, die nicht vorkommt)? Viel Glück.
InformationsquelleAutor Sergey | 2012-01-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen Befehl, der sollte das tun buchstäblich, was Sie gefragt, für die in (2) ist
Aber ich vermute, dass Ihre Analyse des Problems ist falsch. Es wäre nützlich, um die Ausgabe von
ssh -v ...
(wo...
ist, was auch immer Argumente, die Sie eingegeben haben, in Ihrer ursprünglichenssh
Befehl).InformationsquelleAutor zwol
Den Befehl:
wird Ihnen zeigen, welche Dateien geöffnet sind, als stdout (file-Deskriptor 1) und stderr (file descriptor 2).
1 -> pipe:[16418291]
zu einer pid?Ich habe gerade festgestellt, dass in /proc, der andere pid-mit diesem!
0 -> pipe:[16418291]
InformationsquelleAutor caf
Es kann nur getan werden, wenn Sie Ihre Sehnsucht nach shell gestartet wird mit einem Rohr zu
tee
Befehl mit einer anderen Konsole als parameter.Lassen Sie mich erklären.
Wenn du dich einloggst
/dev/tty1
und jemand anderes einloggt/dev/tty2
. Wenn Sie starten Sie Ihre shell (bash), indem Sie folgenden Befehl alle STDOUT/STDERR umgeleitet werden/zu einem anderen kopiert shell (/dev/tty2
in diesem Fall).So, jemand sitzt in
/dev/tty2
werden sehen, alle Ihre Aktivitäten.Wenn jemand logins shell ist
/bin/bash 2>&1 | tee /dev/tty2
statt/bin/bash
Es wird geschehen, jedes mal, wenn er sich einloggt. Aber ich bin nicht sicher, dass die login-shell gesetzt werden können, dass Art und Weise.Wenn jemand leitet die Ausgabe der shell auf diesem Weg können Sie es nur mit der überprüfung, ob alle
tee
im hintergrund läuft.Diese Ausgabe so etwas wie
InformationsquelleAutor Shiplu Mokaddim
Antwort auf deine erste Frage gefunden werden konnte, der in
/proc/self/fd
. Es enthält symbolische Links zu den Dateien (oder andere Dinge, pipes, sockets, etc), dass Ihre bash-Instanz verbunden ist.Im ersten Beispiel können Sie sehen, die ersten 3 Datei-Deskriptoren (das sind die standard-Ausgabe, - Eingabe und-Fehler, jeweils) alle zeigen Sie auf meinem pseudo-terminal
/dev/pts/3
. Im zweiten Beispiel habe ich umgeleitet, um den input/dev/null
, so dass die standard-Eingabe-Dateideskriptor Punkte zu/dev/null
. Und im letzten Beispiel habe ich geschickt die Ausgabe vonls
zucat
durch ein Rohr, und die standard-Eingabe Datei-Deskriptor spiegelt dies wider. Soweit ich weiß gibt es keine Möglichkeit, um herauszufinden, welcher Prozess das andere Ende der pipe. In allen Beispielen gibt es den vierten file-Deskriptor repräsentiert das handle, dasls
hat für das Lesen/proc/self/fd
. In diesem Fall heißt es/proc/15537
weil/proc/self
ist in der Tat ein symlink auf/proc/pid
wopid
ist die PID des Prozesses Zugriff auf/proc/self
.InformationsquelleAutor Robbie Mckennie