Jen hledám rozdíl mezi
2>&-
2>/dev/null
|&
&>/dev/null
>/dev/null 2>&1
a jejich přenositelnost s jinými shelly než Bourne, jako je tcsh
, mksh
, atd.
Přijatá odpověď:
Pro pozadí:
- a číslo 1 =standardní výstup (tj. STDOUT)
- a číslo 2 =standardní chyba (tj. STDERR)
- pokud číslo není výslovně uvedeno, pak číslo 1 je předpokládáno shellem (bash)
Nejprve se podívejme na jejich funkci. Odkaz naleznete v příručce Advanced Bash-Scripting Guide.
Funkce
2>&-
Obecná forma tohoto je M>&-
, kde „M“ je číslo deskriptoru souboru. Tím se zavře výstup pro libovolný popisovač souboru, na který se odkazuje, tj. “M“ .
2>/dev/null
Obecná forma tohoto je M>/dev/null
, kde „M“ je číslo deskriptoru souboru. Tím se přesměruje deskriptor souboru “M“ , na /dev/null
.
2>&1
Obecná forma tohoto je M>&N
, kde „M“ &„N“ jsou čísla deskriptorů souborů. Kombinuje výstup deskriptorů souborů “M“ a „N“ do jednoho streamu.
|&
Toto je pouze zkratka pro 2>&1 |
. Bylo přidáno v Bash 4.
&>/dev/null
Toto je pouze zkratka pro >/dev/null 2>&1
. Přesměruje deskriptor souboru 2 (STDERR) a deskriptor 1 (STDOUT) na /dev/null
.
>/dev/null
Toto je pouze zkratka pro 1>/dev/null
. Přesměruje deskriptor souboru 1 (STDOUT) na /dev/null
.
Přenositelnost na non-bash, tcsh, mksh atd.
S jinými shelly mimo csh
jsem se moc nezabýval a tcsh
. Moje zkušenost s těmito 2 ve srovnání s operátory přesměrování bash je, že bash je v tomto ohledu lepší. Další podrobnosti naleznete na manuálové stránce tcsh.
Žádný z příkazů, na které jste se ptali, není přímo podporován csh/tcsh. K vytvoření podobných funkcí byste museli použít různé syntaxe.