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


22

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

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


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: /'

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.


-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>


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.