GNU/Linux >> Tutoriels Linux >  >> Linux

Différence entre 2>&-, 2>/dev/null, |&, &>/dev/null et>/dev/null 2>&1 ?

Je cherche simplement la différence entre

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

et leur portabilité avec des shells non-Bourne comme tcsh , mksh , etc.

Réponse acceptée :

Pour le fond :

  • un numéro 1 =sortie standard (c'est-à-dire STDOUT)
  • un numéro 2 =erreur standard (c'est-à-dire STDERR)
  • si un numéro n'est pas explicitement donné, alors numéro 1 est assumé par le shell (bash)

Abordons d'abord la fonction de ceux-ci. Pour référence, consultez le Guide de script bash avancé.

Fonctions

2>&-

La forme générale de celui-ci est M>&- , où "M" est un numéro de descripteur de fichier. Cela fermera la sortie pour le descripteur de fichier référencé, c'est-à-dire "M" .

2>/dev/null

La forme générale de celui-ci est M>/dev/null , où "M" est un numéro de descripteur de fichier. Cela redirigera le descripteur de fichier, "M" , à /dev/null .

2>&1

La forme générale de celui-ci est M>&N , où "M" &"N" sont des numéros de descripteur de fichier. Il combine la sortie des descripteurs de fichiers "M" et "N" en un seul flux.

|&

Ceci est juste une abréviation pour 2>&1 | . Il a été ajouté dans Bash 4.

&>/dev/null

Ceci est juste une abréviation pour >/dev/null 2>&1 . Il redirige le descripteur de fichier 2 (STDERR) et le descripteur 1 (STDOUT) vers /dev/null .

>/dev/null

Ceci est juste une abréviation pour 1>/dev/null . Il redirige le descripteur de fichier 1 (STDOUT) vers /dev/null .

Portabilité vers non-bash, tcsh, mksh, etc.

Je n'ai pas beaucoup traité d'autres shells en dehors de csh et tcsh . Mon expérience avec ces 2 par rapport aux opérateurs de redirection de bash, c'est que bash est supérieur à cet égard. Voir la page de manuel tcsh pour plus de détails.

Parmi les commandes que vous avez posées, aucune n'est directement prise en charge par csh/tcsh. Vous devrez utiliser des syntaxes différentes pour construire des fonctions similaires.


Linux
  1. La Différence Entre [[ $a ==Z* ]] Et [ $a ==Z* ] ?

  2. Quelle est la différence entre /sbin/nologin et /bin/false ?

  3. Quand utiliser /dev/random contre /dev/urandom ?

  4. Linux :Différence entre /dev/console , /dev/tty et /dev/tty0

  5. noyau :désactiver /dev/kmem et /dev/mem

Que sont les fichiers /dev/zero et /dev/null sous Linux

Quand dois-je utiliser /dev/shm/ et quand dois-je utiliser /tmp/?

Différence entre /etc/crontab et crontab -e

DD de /dev/zero à /dev/null...ce qui se passe réellement

Différence entre /bin et /usr/bin

Différence entre /etc/hosts et /etc/resolv.conf