Wiem, jak przekierować do pliku i użyć tee; na poziomie podstawowym. Więc
$ alias outanderr='bash -c "echo stdout >&1; echo stderr >&2"'
# A fake "application" displaying both output and error messages.
$ outanderr 1>file # redirect stdout to a file, display stderr
stderr
$ outanderr 2>file # redirect stderr to a file, display stdout
stdout
$ outanderr 1>file 2>&1 # redirect both to a file, display nothing
$ outanderr | tee file; echo "-- file contents --" && cat file
# redirect stdout to a file, display both (note: order is messed up)
stderr
stdout
-- file contents --
stdout
$ outanderr 2>&1 | tee file; echo "-- file contents --" && cat file
# redirect both to a file, display both
stdout
stderr
-- file contents --
stdout
stderr
Pytanie brzmi: co napisać zamiast znaków zapytania, aby uzyskać wynik poniżej:
$ outanderr ???; echo "-- file contents --" && cat file
# redirect both to a file, display stderr
stderr
-- file contents --
stdout
stderr
Konstantty:
- Zakładając uderzenie.
- Kolejność powinna być przechowywana w pliku.
- zawartość stderr jest wyświetlana w czasie rzeczywistym linia po linii, tzn. bez buforowania.
- Można użyć osobnych plików skryptów.
- Magia może być konieczna.
outanderr
jest tylko alias, który wypisuje linię na stdout, a drugi na stderr. Ideą (jeśli to możliwe) jest zbudowanie ogólnego rozwiązania, które mogłoby współpracować z dowolnym programem, bez ich modyfikacji.
outanderr
masz kontroli nad programem?