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.