Je recommanderais généralement de suivre la façon de faire de Bourne-again SHell , car bash est sans doute le shell Unix le plus populaire. Bash utilise généralement soit &>
ou 2>&1
. À mon humble avis, ni l'un ni l'autre n'est "parfait", donc je recommande d'oublier ce non-sens. De manière réaliste, celui que vous devez utiliser dépend de ce que vous essayez de faire.
2>&1
fusionne stderr avec stdout, ce qui peut être utile si, par exemple, vous souhaitez diriger le texte stderr. Ainsi, par exemple, si vous voulez voir si un programme imprime un certain message stderr, mais ne voulez pas que votre écran soit rempli (probablement) de déchets sans importance, vous pouvez faire quelque chose comme program 2>&1 | grep crashed
, qui recherchera la stdout et la stderr d'un programme appelé "programme" pour le mot "planté".
D'un autre côté, si vous ne voulez pas qu'un programme imprime quoi que ce soit, vous pouvez simplement exécuter program &> /dev/null
, qui redirigera stderr et stdout vers / dev / null, un fichier spécial qui fait magiquement disparaître les choses. Ou, si vous souhaitez enregistrer la sortie d'un programme (peut-être pour signaler un bogue ou quelque chose), vous pouvez rediriger stderr et stdout vers un fichier: program &> log.txt
redirigera toutes les données vers un fichier appelé "log.txt". Si vous le souhaitez, vous pouvez rediriger stdout et stderr via program 2> log.txt > log.txt
ou program 2>&1 | cat > log.txt
, les deux ayant le même effet que l'utilisation &>
. Si vous faites quelque chose comme ça program 2>&1 > file
, seul stdout sera redirigé, mais stderr peut toujours être redirigé vers un autre programme, tel que cat, qui pourrait être redirigé comme indiqué ci-dessus. Cependant, en tapant&>
est plus facile que n'importe lequel des exemples ci-dessus, car cela implique de taper moins de caractères (et c'est un peu plus facile à lire pour les êtres humains). Notez que cela program 2> log.txt > log.txt
pourrait être plus susceptible de fonctionner sur des shells non bash.
PS: si vous craignez que les gens utilisent d'autres shells, il y a quelque chose que vous pouvez ajouter pour être la première ligne de votre script appelée "nombre magique", ou "shebang". C'est essentiellement un moyen de s'assurer que les autres ordinateurs (en particulier ceux qui exécutent des systèmes d'exploitation de type Unix) savent quel programme utiliser pour exécuter un script. Différents scripts utilisent différents shebangs. Un shebang pour un script bash ressemble à ceci:
#!/bin/bash
Si vous utilisez ce qui précède comme première ligne d'un script donné, bash sera généralement utilisé pour exécuter ledit script. Cela rendra beaucoup plus difficile pour quelqu'un d'exécuter accidentellement le script avec le mauvais shell.
PS: Je ne vais pas mentir: jusqu'à présent, je ne savais pas qu'on pouvait utiliser >&
, mais, en ce qui concerne bash, il semble faire de même &>
. Vous apprenez quelque chose de nouveau tous les jours.