GNU/Linux >> Znalost Linux >  >> Linux

Rozdíl mezi 2>&-, 2>/dev/null, |&, &>/dev/null A>/dev/null 2>&1?

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.


Linux
  1. Rozdíl mezi [[ $a ==Z* ]] a [ $a ==Z* ]?

  2. Jaký je rozdíl mezi /sbin/nologin a /bin/false?

  3. Rozdíl mezi „$ . Foo“ A „$ ./foo“??

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

  2. Rozdíl mezi /etc/crontab a crontab -e

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

  1. Jaký je rozdíl mezi /tmp a /run?

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

  3. Rozdíly mezi /dev/sda a /dev/sda1