Je veux voir la sortie d'une commande dans le terminal comme s'il n'y avait pas de redirection. De plus, stderr doit être redirigé vers err.log et stdout doit être redirigé vers stdout.log.
Ce serait bien d'avoir également la copie exacte de ce qui est affiché dans le terminal, c'est-à-dire les erreurs imprimées au fur et à mesure que cela se produit, dans un fichier séparé: stdouterr.log.
bash
logs
io-redirection
balki
la source
la source
Réponses:
Utilisez la
tee
commande comme suit:3>&1 1>&2 2>&3
est la façon dont vous échangez stderr et stdout, car tee ne peut accepter que stdout.Jetez un œil à la commande Unix tee pour des redirections plus avancées en utilisant
tee
.la source
cmd
par(cmd ; echo >exit_code.txt $?)
.((cmd | tee stdout.log) 3>&1 1>&2 2>&3 | tee stderr.log)
Je pense que la connexion de stdout et stderr à deux fichiers différents est une idée magnifique. Ne rend-il pas 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
la source
&| tee all.log
à la fin de la commande au lieu de&> all.log
&|
. Je comprends&>
,|&
aussi, mais qu'est-ce que&|
signifie dans ce contexte? Je n'ai pas pu trouver une référence de syntaxe appropriée, pas sur le net, même pas en consultant la page de manuel bash "bash (1)" ... Tx|&
@dogbane, merci.
J'ai également trouvé un autre moyen qui enregistre les deux flux à peu près 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 shells qui prennent en charge la substitution de processus.
la source
essaye ça :
la source