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 .