web-dev-qa-db-fra.com

Sortie de commande rediriger vers le fichier et le terminal

J'essaye de jeter la sortie de commande au dossier plus la console également. C'est parce que je veux garder une trace de la sortie dans un fichier. Je fais suivre et l'ajouter au fichier mais pas imprimer ls sortie sur le terminal.

$ls 2>&1 > /tmp/ls.txt
58
Satish

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

ls 2>&1 | tee /tmp/ls.txt
92
Karoly Horvath

Il est à noter que 2> & 1 signifie que l'erreur standard sera également redirigée, avec la sortie standard. Alors

someCommand | tee someFile

vous donne seulement la sortie standard dans le fichier, mais pas l'erreur standard: l'erreur standard apparaîtra uniquement dans la console. Pour obtenir également une erreur standard dans le fichier, vous pouvez utiliser

someCommand 2>&1 | tee someFile

(source: Dans le shell, qu'est-ce que "2> et 1"? ). Enfin, les deux commandes ci-dessus tronqueront le fichier et commenceront en clair. Si vous utilisez une séquence de commandes, vous voudrez peut-être obtenir une sortie et une erreur de chacune d’elles, l’une après l’autre. Dans ce cas, vous pouvez utiliser -a flag pour "tee":

someCommand 2>&1 | tee -a someFile
26
Serge Rogatch

Dans le cas où quelqu'un aurait besoin d'ajouter la sortie et de ne pas le remplacer, il est possible d'utiliser l'option "-a" ou "--append" de la commande "tee":

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