Řekněme, že spustím příkaz nebo skript shellu a ten mi poskytne výstup. Bez znalosti vnitřních prvků tohoto příkazu nebo shell skriptu, jak lze určit, zda je výstup z stderr
nebo stdout
?
Například,
$ ls -ld /
drwxrwxr-t 35 root admin 1258 Dec 11 19:16 /
vs
ls -ld /test
ls: /test: No such file or directory
Jak zjistím, že se první příkaz vytiskl na stdout
a druhý na stderr
(udělal?)?
Přijatá odpověď:
Neexistuje způsob, jak to zjistit, jakmile byl výstup již vytištěn. V tomto případě obě stdout
a stderr
jsou připojeny k terminálu, takže informace o tom, do kterého streamu bylo zapsáno, byla ztracena již v době, kdy se text objevil na vašem terminálu; byly zkombinovány programem, než se vůbec dostaly na terminál.
Co můžete udělat, v případě, jako je výše uvedený, je spustit příkaz pomocí stdout
a stderr
přesměrováni na různá místa a uvidíte, co se stane. Nebo jej spusťte dvakrát, jednou pomocí stdout
přesměrován na /dev/null
a jednou pomocí stderr
přesměrován na /dev/null
a podívejte se, který z těchto případů vede k zobrazení textu.
Můžete přesměrovat stdout
na /dev/null
připnutím >/dev/null
na konci příkazového řádku a můžete přesměrovat stderr
na /dev/null
přidáním 2>/dev/null
.