Comment enregistrer la sortie du terminal dans un fichier?

382

Comment enregistrer la sortie d’une commande dans un fichier?

Y a-t-il un moyen sans utiliser de logiciel? Je voudrais savoir comment.

    
posée led-Zepp 14.02.2014 - 20:49
la source

7 réponses

378

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

someCommand > someFile.txt  

Ou si vous souhaitez ajouter des données:

someCommand >> someFile.txt

Si vous voulez aussi stderr utiliser ceci:

someCommand &> someFile.txt  

ou ceci pour ajouter:

someCommand &>> someFile.txt  
    
réponse donnée Seth 14.02.2014 - 20:52
la source
512

Pour écrire la sortie d'une commande dans un fichier, il existe essentiellement 10 méthodes couramment utilisées.

Aperçu:

  

Veuillez noter que 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 ne seront redirigés que 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 ne seront redirigés que 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 raccourcie qui permet de ne canaliser que StdErr vers une seconde commande, qui serait ici nécessaire en combinaison avec tee pour compléter la table. Si vous avez vraiment besoin de quelque chose comme ça, consultez "Comment canaliser stderr, et pas stdout?" sur le débordement de pile pour certaines manières comment cela peut être fait 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.

réponse donnée Byte Commander 08.02.2016 - 15:52
la source
80

Vous pouvez également utiliser tee pour envoyer la sortie vers un fichier:

command | tee ~/outputfile.txt

Une légère modification va également attirer 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 souhaitez pouvoir capturer les sorties de commande tout en les visualisant en direct .

    
réponse donnée Aaron 20.06.2014 - 06:45
la source
17

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

your_command >/path/to/file

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

your_command >>/path/to/file
    
réponse donnée chaos 14.02.2014 - 20:52
la source
11

Une amélioration à considérer -

Différents scripts injecteront des codes de couleur dans la sortie que vous ne souhaiterez peut-être pas encombrer votre fichier journal.

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

command 2>&1 | sed -r 's/'$(echo -e "3")'\[[0-9]{1,2}(;([0-9]{1,2})?)?[mK]//g' | tee ~/outputfile.txt
    
réponse donnée Sean Huber 08.07.2014 - 22:57
la source
1

Pour les travaux cron , vous voulez é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'installation POSIX est en quelque sorte plus simple et plus simple. La syntaxe &> a été empruntée à csh , ce qui devrait déjà vous convaincre que c'est une mauvaise idée.

    
réponse donnée tripleee 11.04.2018 - 14:25
la source
0

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

Pour éviter ce problème et enregistrer la sortie de la commande en temps réel, vous pouvez ajouter unbuffer , 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

Informations complémentaires: Comment enregistrer une sortie de commande dans un fichier en temps réel?

    
réponse donnée Franck Dernoncourt 04.07.2018 - 22:54
la source

Lire d'autres questions sur les étiquettes