web-dev-qa-db-fra.com

Comment enregistrer la sortie du terminal dans un fichier?

Comment enregistrer le résultat d'une commande dans un fichier?

Existe-t-il un moyen d'utiliser aucun logiciel? J'aimerais savoir comment.

594
led-Zepp

Oui c'est possible, il suffit de rediriger la sortie vers un fichier:

SomeCommand > SomeFile.txt  

Ou si vous souhaitez ajouter des données:

SomeCommand >> SomeFile.txt

Si vous voulez stderr , utilisez aussi ceci:

SomeCommand &> SomeFile.txt  

ou ceci pour ajouter:

SomeCommand &>> SomeFile.txt  

si vous voulez avoir les deux stderr et la sortie affichées sur la console et dans un fichier utilisez ceci:

SomeCommand 2>&1 | tee SomeFile.txt

(Si vous ne voulez que la sortie, supprimez le 2 ci-dessus)

619
Seth

Pour écrire le résultat d’une commande dans un fichier, il existe 10 méthodes couramment utilisées.

Vue d'ensemble:

Veuillez noter que le n.e. dans la colonne de syntaxe signifie "non existant".
Il y a un moyen, mais c'est trop compliqué pour tenir dans la colonne. Vous pouvez trouver un lien utile dans la section Liste à ce sujet.

          || visible in terminal ||   visible in file   || existing
  Syntax  ||  StdOut  |  StdErr  ||  StdOut  |  StdErr  ||   file   
==========++==========+==========++==========+==========++===========
    >     ||    no    |   yes    ||   yes    |    no    || overwrite
    >>    ||    no    |   yes    ||   yes    |    no    ||  append
          ||          |          ||          |          ||
   2>     ||   yes    |    no    ||    no    |   yes    || overwrite
   2>>    ||   yes    |    no    ||    no    |   yes    ||  append
          ||          |          ||          |          ||
   &>     ||    no    |    no    ||   yes    |   yes    || overwrite
   &>>    ||    no    |    no    ||   yes    |   yes    ||  append
          ||          |          ||          |          ||
 | tee    ||   yes    |   yes    ||   yes    |    no    || overwrite
 | tee -a ||   yes    |   yes    ||   yes    |    no    ||  append
          ||          |          ||          |          ||
 n.e. (*) ||   yes    |   yes    ||    no    |   yes    || overwrite
 n.e. (*) ||   yes    |   yes    ||    no    |   yes    ||  append
          ||          |          ||          |          ||
|& tee    ||   yes    |   yes    ||   yes    |   yes    || overwrite
|& tee -a ||   yes    |   yes    ||   yes    |   yes    ||  append

Liste:

  • command > output.txt

    Le flux de sortie standard sera redirigé vers le fichier uniquement, il ne sera pas visible dans le terminal. Si le fichier existe déjà, il est écrasé.

  • command >> output.txt

    Le flux de sortie standard sera redirigé vers le fichier uniquement, il ne sera pas visible dans le terminal. Si le fichier existe déjà, les nouvelles données seront ajoutées à la fin du fichier.

  • command 2> output.txt

    Le flux d'erreur standard sera redirigé vers le fichier uniquement, il ne sera pas visible dans le terminal. Si le fichier existe déjà, il est écrasé.

  • command 2>> output.txt

    Le flux d'erreur standard sera redirigé vers le fichier uniquement, il ne sera pas visible dans le terminal. Si le fichier existe déjà, les nouvelles données seront ajoutées à la fin du fichier.

  • command &> output.txt

    La sortie standard et le flux d'erreur standard seront tous deux redirigés vers le fichier, rien ne sera visible dans le terminal. Si le fichier existe déjà, il est écrasé.

  • command &>> output.txt

    La sortie standard et le flux d'erreur standard seront tous deux redirigés vers le fichier, rien ne sera visible dans le terminal. Si le fichier existe déjà, les nouvelles données seront ajoutées à la fin du fichier.

  • command | tee output.txt

    Le flux de sortie standard sera copié dans le fichier, il sera toujours visible dans le terminal. Si le fichier existe déjà, il est écrasé.

  • command | tee -a output.txt

    Le flux de sortie standard sera copié dans le fichier, il sera toujours visible dans le terminal. Si le fichier existe déjà, les nouvelles données seront ajoutées à la fin du fichier.

  • (*)

    Bash n'a pas de syntaxe abrégée permettant de ne connecter que StdErr à une deuxième commande, ce qui serait nécessaire ici en combinaison avec tee pour compléter le tableau. Si vous avez vraiment besoin de quelque chose comme ça, veuillez regarder "Comment utiliser stderr, et non stdout?" Sur Stack Overflow pour certaines raisons, comment cela peut être fait, par exemple. en échangeant des flux ou en utilisant la substitution de processus.

  • command |& tee output.txt

    La sortie standard et les flux d'erreur standard seront copiés dans le fichier tout en restant visibles dans le terminal. Si le fichier existe déjà, il est écrasé.

  • command |& tee -a output.txt

    La sortie standard et les flux d'erreur standard seront copiés dans le fichier tout en restant visibles dans le terminal. Si le fichier existe déjà, les nouvelles données seront ajoutées à la fin du fichier.

764
Byte Commander

Vous pouvez également utiliser tee pour envoyer le résultat dans un fichier:

command | tee ~/outputfile.txt

Une légère modification attirera également stderr:

command 2>&1 | tee ~/outputfile.txt

ou légèrement plus court et moins compliqué:

command |& tee ~/outputfile.txt

tee est utile si vous voulez pouvoir capturer la sortie de la commande tout en la visualisant en direct.

100
Aaron

Vous pouvez rediriger la sortie de la commande vers un fichier:

your_command >/path/to/file

Pour ajouter le résultat de la commande à un fichier au lieu de l'écraser, utilisez:

your_command >>/path/to/file
19
chaos

Une amélioration à considérer -

Divers scripts introduiront dans la sortie des codes de couleur que vous ne voudrez peut-être pas encombrer votre fichier journal.

Pour résoudre ce problème, vous pouvez utiliser le programme sed pour effacer ces codes. Exemple:

command 2>&1 | sed -r 's/'$(echo -e "\033")'\[[0-9]{1,2}(;([0-9]{1,2})?)?[mK]//g' | tee ~/outputfile.txt
14
Sean Huber

Pour les travaux cronname__, etc., vous souhaitez éviter les extensions Bash. Les opérateurs de redirection POSIX shéquivalents sont:

Bash          POSIX
------------  --------------
foo &> bar    foo >bar 2>&1
foo &>> bar   foo >>bar 2>&1
foo |& bar    foo 2>&1 | bar

Vous remarquerez que l'utilitaire POSIX est en quelque sorte plus simple et plus simple. La syntaxe &> a été empruntée à cshname__, ce qui devrait déjà vous convaincre que c'est une mauvaise idée.

5
tripleee

some_command | tee command.log et some_command > command.log ont comme problème de ne pas enregistrer le résultat de la commande dans le fichier command.log en temps réel.

Pour éviter ce problème et enregistrer le résultat de la commande en temps réel, vous pouvez ajouter unbuffer, qui est fourni avec le package expect.


Exemple:

Sudo apt-get install expect
unbuffer some_command | tee command.log
unbuffer some_command > command.log

En supposant que log.py contient:

import time
print('testing')
time.sleep(100) # sleeping for 100 seconds

vous pouvez exécuter unbuffer python log.py | tee command.log ou unbuffer python log.py > command.log

Plus d'informations: Comment enregistrer une sortie de commande dans un fichier en temps réel?

1
Franck Dernoncourt