GNU/Linux >> Znalost Linux >  >> Linux

Jak zjistit, zda je výstup příkazového nebo shellového skriptu Stdout nebo Stderr?

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


Linux
  1. Jak přiřadit výstup příkazu Linux k proměnné

  2. Jak uložit výstup příkazu do souboru v Linuxu

  3. Jak vytvořit skript příkazu Linux

  1. Jak uložit příkaz do proměnné v shell skriptu?

  2. Jak mohu zacyklit výstup příkazu shellu?

  3. Jak mohu spravovat podrobnost protokolu uvnitř skriptu shellu?

  1. Jak vytisknout Stdout příkazu v opačném pořadí na Linux Shell

  2. Jak vyčistit výstup příkazu linux 'script'

  3. Přesměrování výstupu příkazu v dockeru