Il y a quelque temps, j'ai fait un script et j'ai ajouté un peu de journalisation, mais j'ai oublié comment fonctionne la redirection pour la journalisation :-(
L'essentiel est:
#!/bin/bash
LOGFILE=/some/path/mylogfile
(
# here go my commands which produce some stdout
# and, if something goes wrong, also some stderr
) 1>>${LOGFILE} 2> >( tee -a ${LOGFILE} >&2 )
Lorsque j'exécute le script, il n'imprime rien stdout
, mais imprime uniquement ce qui va stderr
. Le fichier journal ${LOGFILE}
capture à la fois stdout et stderr.
Lorsque j'exécute le script et qu'il n'y a pas de sortie sur mon terminal, je sais que tout va bien. S'il y a une sortie, je sais que quelque chose s'est mal passé et je peux vérifier le fichier journal pour découvrir quel est le problème.
La partie de la redirection qui me laisse maintenant perplexe est la syntaxe de: 2> >( some command )
Quelqu'un peut-il expliquer ce qui se passe là-bas?
echo <(date)
, il me donne le nom du fichier substitué:/dev/fd/63
. Si j'exécutecat <(date)
, il me donne la date, à savoir le contenu du fichier substitué:Fri Nov 18 14:11:09 NZDT 2016
./dev
est un nom pour le canal entre les processus.tee
, dans ce cas)?tee
stderr et de le séparer de stdout.