GNU/Linux >> Linux Esercitazione >  >> Linux

Differenza tra 2>&-, 2>/dev/null, |&, &>/dev/null E>/dev/null 2>&1?

Sto solo cercando la differenza tra

  • 2>&-
  • 2>/dev/null
  • |&
  • &>/dev/null
  • >/dev/null 2>&1

e la loro portabilità con shell non Bourne come tcsh , mksh , ecc.

Risposta accettata:

Per lo sfondo:

  • un numero 1 =uscita standard (cioè STDOUT)
  • un numero 2 =errore standard (es. STDERR)
  • se un numero non viene fornito in modo esplicito, allora numero 1 è assunto dalla shell (bash)

Per prima cosa affrontiamo la funzione di questi. Per riferimento, vedere la Guida avanzata agli script Bash.

Funzioni

2>&-

La forma generale di questo è M>&- , dove "M" è un numero di descrittore di file. Questo chiuderà l'output per qualsiasi descrittore di file a cui si fa riferimento, ad esempio "M" .

2>/dev/null

La forma generale di questo è M>/dev/null , dove "M" è un numero di descrittore di file. Questo reindirizzerà il descrittore di file, "M" , su /dev/null .

2>&1

La forma generale di questo è M>&N , dove "M" &"N" sono i numeri del descrittore di file. Combina l'output dei descrittori di file "M" e "N" in un unico flusso.

|&

Questa è solo l'abbreviazione di 2>&1 | . È stato aggiunto in Bash 4.

&>/dev/null

Questa è solo l'abbreviazione di >/dev/null 2>&1 . Reindirizza il descrittore di file 2 (STDERR) e il descrittore 1 (STDOUT) a /dev/null .

>/dev/null

Questa è solo l'abbreviazione di 1>/dev/null . Reindirizza il descrittore di file 1 (STDOUT) a /dev/null .

Portabilità a non-bash, tcsh, mksh, ecc.

Non ho avuto a che fare molto con altre shell al di fuori di csh e tcsh . La mia esperienza con quei 2 rispetto agli operatori di reindirizzamento di bash, è che bash è superiore a questo riguardo. Vedi la pagina man di tcsh per maggiori dettagli.

Dei comandi che hai chiesto, nessuno è supportato direttamente da csh/tcsh. Dovresti usare sintassi diverse per costruire funzioni simili.


Linux
  1. Linux:differenza tra /dev/console , /dev/tty e /dev/tty0?

  2. La differenza tra [[ $a ==Z* ]] e [ $a ==Z* ]?

  3. Quanto sono portatili /dev/stdin, /dev/stdout e /dev/stderr?

  4. Qual è la differenza tra /sbin/nologin e /bin/false?

  5. La differenza tra /opt e /usr/local?

La differenza tra '$ . Foo' E '$ ./foo'??

Differenza tra /etc/crontab e crontab -e

Linux:differenza tra /dev/console , /dev/tty e /dev/tty0

kernel:disabilitare /dev/kmem e /dev/mem

echo o print /dev/stdin /dev/stdout /dev/stderr

Differenza tra /etc/hosts e /etc/resolv.conf