Ik weet dat in Linux, om de uitvoer van het scherm naar een bestand te omleiden, ik kan de >
of tee
gebruiken. 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
strike>
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.txt
bijvoorbeeld te krijgen.
make 2>&1 | tee file.txt
OPMERKING: &
(IN 2>&1
) Geeft aan dat 1
geen 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 exec
opdracht 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