Rijd alle uitvoer naar bestand in Bash

Ik weet dat in Linux, om de uitvoer van het scherm naar een bestand te omleiden, ik kan de >of teegebruiken. Ik weet echter niet zeker waarom een ​​deel van de uitvoer nog steeds naar het scherm wordt uitgevoerd en niet naar het bestand wordt geschreven.

Is er een manier om alle uitvoer naar het bestand te omleiden?


1, Autoriteit 100%

Dat deel is naar Stderr geschreven, gebruik 2>om het om te sturen. Bijvoorbeeld:

foo > stdout.txt 2> stderr.txt

of als u in hetzelfde bestand wilt:

foo > allout.txt 2>&1

Opmerking: dit werkt in (BA) SH, controleer uw shell voor de juiste syntaxis


2, Autoriteit 12%

Alle POSIX-besturingssystemen hebben 3 stromen : stdin, stdout en Stderr. Stdin is de input, die de stDout of Stderr kan accepteren. Stdout is de primaire uitvoer, die wordt omgeleid met >, >>of |. Stderr is de foutoutput, die afzonderlijk wordt behandeld, zodat alle uitzonderingen niet worden doorgegeven aan een opdracht of geschreven naar een bestand dat het kan breken; Normaal gesproken wordt dit naar een logboek van een soort verzonden of direct gedumpt, zelfs wanneer de stdout wordt omgeleid. Om zowel naar dezelfde plaats om te leiden, gebruikt u:

$command &> /some/file

Bewerken : Dank aan Zack om erop te wijzen dat de bovenstaande oplossing niet draagbaar is – gebruik in plaats daarvan:

$command > file 2>&1 

Als u de fout wilt zwijgen, doet u:

$command 2> /dev/null

3, Autoriteit 8%

Om de uitvoer op de console en in een bestand file.txtbijvoorbeeld te krijgen.

make 2>&1 | tee file.txt

OPMERKING: &(IN 2>&1) Geeft aan dat 1geen bestandsnaam is, maar een bestandsdescriptor.


4, Autoriteit 3%

Credits aan OSEXP2003 en J.A. …


In plaats van te zetten:

&>> your_file.log

achter een lijn in:

crontab -e

Ik gebruik:

#!/bin/bash
exec &>> your_file.log
…

Aan het begin van een bash script.

Voordeel: u hebt de log-definities binnen uw script. Goed voor git enz.


5

U kunt execopdracht gebruiken om alle stDout / Stderr-uitvoer van eventuele opdrachten later om te leiden.

Voorbeeldscript:

exec 2> your_file2 > your_file1
your other commands.....

6

Opdracht:

foo >> output.txt 2>&1

Voegt toe aan het Output.txt -bestand, zonder de inhoud te vervangen.


7

het is misschien de standaardfout. U kunt het omleiden:

... > out.txt 2>&1

8

Gebruik >>om toe te voegen:

command >> file

Other episodes