GNU/Linux >> Znalost Linux >  >> Linux

Proč se přesměrování Stderr na /dev/null provádí tímto způsobem?

To mi nedává smysl.

wibble > /dev/null 2>&1

Myslím, že by to dávalo větší smysl, kdyby to bylo něco takového:

wibble 2>&1 > /dev/null

Jinými slovy

Commands Output Sendall STDERRORS to STDOUT then SEND it all to /dev/null

Jaká je myšlenka za pořadím přesměrování příkazu xxx > /dev/null 2>1 ?

Přijatá odpověď:

Přesměrování jsou zpracovávána zleva doprava. Pokud ano

2>&1 1> /dev/null

První přesměrování vytvoří stderr přejděte na stream, který stdout ukazuje na v té době (což je v podstatě vaše tty). Nedělá stderr alias stdout .

Poté stdout je přesměrován na bit bucket. stdout přesměrování neovlivňuje předchozí stderr přesměrovat. stderr stále odkazuje na vaše tty.

Takže:

ls file_that_doesnt_exist 2>&1 1> /dev/null

vytiskne na váš terminál pouze chybovou zprávu.

bash stránka dokumentace přesměrování to výslovně uvádí:

Všimněte si, že pořadí přesměrování je důležité. Například příkaz

          ls > dirlist 2>&1

směruje standardní výstup i standardní chybu do souboru dirlist, zatímco příkaz

          ls 2>&1 > dirlist

přesměruje pouze standardní výstup do souboru dirlist, protože standardní chyba byla duplikována ze standardního výstupu předtím, než byl standardní výstup přesměrován na dirlist .


Linux
  1. Co jsou soubory /dev/zero a /dev/null v Linuxu

  2. Jak kódovat base64 /dev/random nebo /dev/urandom?

  3. Kdy mám použít /dev/shm/ a kdy /tmp/?

  1. Jak Linux používá /dev/tty a /dev/tty0

  2. echo nebo print /dev/stdin /dev/stdout /dev/stderr

  3. Proč jsou < nebo > vyžadovány pro použití /dev/tcp

  1. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  2. Jak přenosné jsou /dev/stdin, /dev/stdout a /dev/stderr?

  3. Shell:přesměrujte stdout na /dev/null a stderr na stdout