web-dev-qa-db-fra.com

Comment connecter la sortie en bash et le voir dans le terminal en même temps?

J'ai des scripts où j'ai besoin de voir la sortie et log le résultat à un fichier, avec l'exemple le plus simple:

$ update-client > my.log

Je veux pouvoir voir la sortie de la commande pendant son exécution, mais aussi l'avoir connecté au fichier. Je me connecte aussi stderr. Je voudrais donc pouvoir enregistrer le flux d'erreur tout en le voyant aussi.

23
Kristopher Ives
update-client 2>&1 | tee my.log

2> & 1 redirige une erreur standard vers la sortie standard et TEE envoie son entrée standard à la sortie standard et au fichier.

42
Matthew Flaschen

Utilisez simplement la queue pour regarder le fichier tel qu'il est mis à jour. Contexte Votre processus d'origine en ajoutant et après la commande ci-dessus après avoir exécuté la commande ci-dessus, il suffit d'utiliser

$ tail -f my.log

Il mettra continuellement à jour. (Remarque Il ne vous dira pas lorsque le fichier a fini de fonctionner afin que vous puissiez produire quelque chose sur le journal pour vous indiquer qu'il est terminé. Ctrl-C à quitter la queue)

4
Cfreak

une autre option consiste à utiliser la capture de sortie basée sur des blocs à partir du script (pas sûr si c'est le terme technique correct).

Exemple

#!/bin/bash 
{
  echo "I will be sent to screen and file"
  ls ~
} 2>&1 | tee -a /tmp/logfile.log

echo "I will be sent to just terminal"

J'aime avoir plus de contrôle et de flexibilité - donc je préfère ainsi.

4
rynop