Sprawdź, czy wyjście jest standardowe, czy standardowe

22

Jak mogę ustalić, czy to, co wyprowadza proces, jest standardowe lub standardowe?

Rauffle
źródło

Odpowiedzi:

22

Są tylko trzy sposoby, które znam, aby określić, co program wyświetli do STDOUT i co do STDERR

  1. Przeczytaj dokumentację. Lub

  2. Eksperymentuj z przekierowaniem †

  3. wydrukuj STDERR na czerwono

†Na przykład:

program > program.stdout 2> program.stderr

Następnie spójrz na dwa pliki wyjściowe, aby zobaczyć, co program napisał do STDOUT i co napisał do STDERR.

Zamiast przekierowania możesz teeprzesłać do potoku, jeśli potrzebujesz wyjścia, aby przejść do ekranu, a także do pliku. Zobacz /programming//q/692000/477035

RedGrittyBrick
źródło
15
Zwykle używam wariantu opcji 3: program | grep .drukuje STDOUT na czerwono.
Dennis
Drukowanie na czerwono jest dokładnie tym, czego szukałem. Dzięki RedGrittyBrick & Dennis
Rauffle
7

Na podstawie skomentowanego żądania:

{ { command; } 2>&3 | sed 's/^/STDOUT: /'; } 3>&1 1>&2 | sed 's/^/STDERR: /'
zebediah49
źródło
3
Wygląda imponująco. Ale czy mógłbyś dodać wiśnie do drzewa i wyjaśnić, co on robi? Nie wszyscy tutaj są guru - a twoja konstrukcja jest dość złożona;)
Izzy
Wsporniki służą do zamawiania. Właściwie otrzymałem tę dokładną formę od I-Remember-where, ale chodzi o to, aby użyć dodatkowych deskryptorów plików (poza 1 = stdouti 2 = stderr), aby pobrać dane wyjściowe wewnętrznego zestawu nawiasów i uruchomić stdoutjedno sedpolecenie, podczas gdy stderrprzechodzi przez inny.
zebediah49
Łał. Nie wiedziałem, jak korzystać z tych dodatkowych deskryptorów. Najpierw byłem trochę zdezorientowany (lubię rozumieć, co biegam - i trochę się myliłem z nawiasami klamrowymi). Ale teraz jest jasne - i IMHO dokładnie to, czego chciał PO. Więc +1 ode mnie :)
Izzy
To mi pomogło. Chciałem dodać więcej danych do stderr. Robi to i poprawnie wyprowadza wszystko z powrotem na stdout / stderr. { { { { echo "stdout" ; echo "stderr">&2; } 2>&3; } 3>&1 1>&2 | awk '{print "ERROR:",$0}' 1>&3; } 3>&2 2>&1; }
Bryan Drewery
0

Możesz po prostu przekierować stderr do pliku, a jeśli coś się w nim pojawi, pochodzi od stderr.

na przykład ls -a 2> ls-all.txt

jeśli z jakiegokolwiek powodu wystąpił błąd wysłany do stderr, zostanie on przekierowany do tego pliku.

magna_nz
źródło
-1

Jeśli chcesz to zrobić raz, przekieruj jeden z nich gdzie indziej.

Przykład przekierowania standardu za pomocą >.

ls -al> ls-l.txt (każde wyjście tutaj nie pochodzi ze standardowego wyjścia, jeśli coś widzisz, musi być wyjściem standardowym)

Do użycia przekierowania stderr 2>

Hennes
źródło
Proces tworzy ciągły strumień danych wyjściowych, niektóre do stderout do stderr. Chcę ustalić, która z nich jest wyświetlana na ekranie
Rauffle,