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.