Jak toho mohu pomocí BASH magic dosáhnout?
Chci na obrazovce vidět pouze výstup stderr,
ale chci, aby stdout i stderr byly zapsány do souboru.
Vysvětlení:
Chci, aby stdout i stderr skončily ve stejném souboru. V pořadí, v jakém se dějí.
Bohužel žádná z níže uvedených odpovědí to nedělá.
Přijatá odpověď:
I bez jakéhokoli přesměrování nebo s ničím jiným než >logfile 2>&1
, není zaručeno, že výstup uvidíte v pořadí generování.
Pro začátek bude stdout z aplikace ukládán do vyrovnávací paměti (do tty) nebo vyrovnávací paměti (do potrubí), ale stderr je bez vyrovnávací paměti, takže vztahy mezi pořadím výstupu jsou, pokud jde o čtenáře, narušeny. Následné fáze v jakémkoli potrubí, které byste mohli vymyslet, nezíská deterministicky uspořádaný přístup ke dvěma proudům (jsou to koncepčně věci, které se dějí paralelně a vy vždy podléháte plánovači – pokud v době, kdy váš čtenář dostane řez, autor již zapsáno do obou kanálů, nelze určit, která byla první).
„Pořadí, v jakém se dějí“ je skutečně známé pouze aplikaci. Uspořádání výstupu přes stdout/stderr je dobře známý – možná klasický – problém.