Réponses:
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 stderraussi utiliser ceci:
SomeCommand &> SomeFile.txt
ou ceci pour ajouter:
SomeCommand &>> SomeFile.txt
si vous voulez avoir les deux stderret la sortie affichés sur la console et dans un fichier, utilisez ceci:
SomeCommand 2>&1 | tee SomeFile.txt
(Si vous ne voulez que la sortie, supprimez ce qui 2précède)
makecommande dans un fichier, cette syntaxe requiert la syntaxe suivante: make > someFile.txt 2>&1(source: linuxquestions.org/questions/linux-newbie-8/… )
Pour écrire le résultat d’une commande dans un fichier, il existe 10 méthodes couramment utilisées.
Veuillez noter que la
n.e.colonne dans la syntaxe signifie "non existant".
Il y a un moyen, mais c'est trop compliqué à intégrer 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
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 redirigés vers le fichier uniquement, 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 redirigés vers le fichier uniquement, 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 lier que StdErr à une deuxième commande, ce qui serait nécessaire ici en combinaison avec à teenouveau pour compléter le tableau. Si vous avez vraiment besoin de quelque chose comme ça, regardez s'il vous plaît "Comment faire pour canaliser stderr, et pas stdout?" sur le dépassement de pile pour certaines raisons, par exemple en échangeant des flux ou en utilisant un processus de substitution.
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.
2>&1redirige STDERR vers STDOUT, 1>&2redirige STDOUT vers STDERR et 3>&1redirige le flux 3 vers STDERR.
sh: 1: Syntax error: "&" unexpectedlorsque j'utilise |& teeun script Python sur un serveur c9.io. Il semble qu'une coquille différente est utilisée. echo $SHELLmontre /bin/bashet $SHELL --versionmontre la version 4.3.11 (1) -release. J'ai essayé #!/bin/bashdans mon script python mais je comprends toujours sh: 1: Syntax error. J'ai eu ce dont j'avais besoin alors je renonce à trier l'étrangeté entre shet bashsur mon serveur. Merci.
shet non bash(ou peut-être bashen shmode ...). Vous pouvez vérifier ce que votre processus de shell actuel utilise exactement ps -p $$ -o cmd=, car il echo $SHELLest peu fiable et vous montrera votre shell de connexion, en ignorant si vous avez peut-être démarré un sous-shell différent.
Vous pouvez également utiliser teepour envoyer la sortie 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
teeest utile si vous voulez pouvoir capturer la sortie de la commande tout en la visualisant en direct .
2>&1?
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
Une amélioration à considérer -
Divers scripts introduiront dans la sortie des codes de couleur que vous ne voudrez peut-être pas encombrer dans 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
lset grep, prennent en charge --color=autoles codes de couleur uniquement si la sortie standard est un terminal.
Pour les crontâches, etc., vous voulez éviter les extensions Bash. Les shopérateurs de redirection POSIX é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 à cshlaquelle devrait déjà vous convaincre que c'est une mauvaise idée.
some_command | tee command.loget some_command > command.logle problème est qu'ils n'enregistrent pas la sortie de la commande dans le command.logfichier 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, fourni avec le expectpackage.
Exemple:
sudo apt-get install expect
unbuffer some_command | tee command.log
unbuffer some_command > command.log
En supposant que log.pycontient:
import time
print('testing')
time.sleep(100) # sleeping for 100 seconds
tu peux courir unbuffer python log.py | tee command.logouunbuffer python log.py > command.log
Informations complémentaires : Comment enregistrer une sortie de commande dans un fichier en temps réel?
someCommand 2> someFile.txtetsomeCommand 2>> someFile.txtredirige également versstterrsomeFile.txt