2012-11-27 5 views
47

J'essaie de lancer la sortie de la commande vers le fichier plus la console aussi. C'est parce que je veux garder l'enregistrement de la sortie dans le fichier. Je fais le suivi et l'ajout au fichier mais pas l'impression ls sortie sur le terminal.sortie de commande rediriger vers le fichier et le terminal

$ls 2>&1 > /tmp/ls.txt 
+2

usecase typique tee – Kent

Répondre

74

Oui, si vous redirigez la sortie, elle n'apparaîtra pas sur la console. Utilisez tee.

ls 2>&1 | tee /tmp/ls.txt 
+0

-t-il écrire stderr et stdout fois ?? – Satish

+2

Dans ce cas, l'erreur est fusionnée dans la sortie ('2> & 1'), de sorte que le processus suivant consommant le tube verra les deux comme une entrée normale (en bref: oui). –

+0

Comment ajouter des journaux en utilisant tee? – Satish

9

Dans le cas où quelqu'un a besoin d'ajouter la sortie et non majeur, il est possible d'utiliser « -a » ou « --append option » de commande « T »:

ls 2>&1 | tee -a /tmp/ls.txt 
ls 2>&1 | tee --append /tmp/ls.txt 
+1

J'aime ça ... ça marche sur Mac doucement –

17

Il est Il convient de mentionner que 2> & 1 signifie que l'erreur standard sera également redirigée avec la sortie standard. Alors

someCommand | tee someFile 

vous donne juste la sortie standard dans le fichier, mais pas l'erreur standard: erreur standard apparaît uniquement dans la console. Pour obtenir l'erreur-type dans le fichier aussi, vous pouvez utiliser

someCommand 2>&1 | tee someFile 

(source: In the shell, what is " 2>&1 "?). Enfin, les deux commandes ci-dessus vont tronquer le fichier et commencer à effacer. Si vous utilisez une séquence de commandes, vous souhaiterez peut-être obtenir l'erreur de sortie & de chacune d'entre elles, l'une après l'autre. Dans ce cas, vous pouvez utiliser -a drapeau commande « tee »:

someCommand 2>&1 | tee -a someFile 
Questions connexes