Je veux voir la sortie d'une commande dans le terminal comme s'il n'y avait pas de redirection. Aussi, Sterr doit être redirigé vers Err.Log et STDOUT doit être redirigé vers stdout.log.
Il serait agréable de disposer également de la copie exacte de ce qui est montré dans le terminal, c'est-à-dire des erreurs imprimées comme et lorsqu'elle se produit, dans un fichier séparé: stdouterr.log.
Utilisez la commande tee
comme suit:
(cmd | tee stdout.log) 3>&1 1>&2 2>&3 | tee stderr.log
3>&1 1>&2 2>&3
Est-ce que vous échangez STDERR et STDOUT, car TEE ne peut accepter que stdout.
Jetez un coup d'œil à Commande Unix Tee Pour plus de redirections avancées à l'aide de tee
.
Je pense que la journalisation STDOUT et STDERR à deux fichiers différents sont une idée splendide. Ne fait-il pas que les journaux asynchrones? J'ai donc essayé ce qui suit:
((cmd | tee stdout.log) 3>&1 1>&2 2>&3 | tee stderr.log) &> all.log
dans un autre terminal
tail -f --sleep-interval=2 all.log
@dogbane, merci.
[.____] J'ai trouvé un autre moyen aussi qui évite les flux approximativement dans l'ordre, car ils seraient imprimés sans redirection.
command 2> >(tee errlog | tee -a bothLog > /dev/tty ) | tee outlog | tee -a bothLog
Mais cela ne fonctionne qu'avec les coquilles qui soutient la substitution du processus.