Stuur stdout en stderr om naar Bestand

Redirect Stdout Stderr File



Wanneer u een opdrachtuitvoer omleidt naar een bestand, zult u merken dat de foutmeldingen in het terminalvenster worden afgedrukt. Elke opdracht die wordt uitgevoerd in een Linux-shell, zoals bash, gebruikt drie reguliere I/O-streams. Een numerieke bestandsdescriptor wordt gebruikt om elke stream weer te geven.

  • De standaard invoerstroom (stdin): 0
  • De standaard uitvoerstroom (stdout): 1
  • De standaard foutstroom (stderr): 2

In dit bericht zullen we de informatie begrijpen die valt onder het omleiden van stdout en stderr naar bestand.







Standaard uitvoer (stuit):

Elk besturingssysteem op basis van Linux heeft een overtuiging van een standaardplaats voor de uitgevoerde opdracht. Iedereen noemt dit begrip stdout of standaarduitvoer om het gemakkelijker te laten klinken. Je Bash- of Zsh-shell is constant op zoek naar de standaarduitvoerlocatie. Wanneer de shell nieuwe uitvoer detecteert, wordt deze op het terminalscherm weergegeven zodat u deze kunt zien. Anders stuurt het de uitvoer naar de standaardlocatie.



Standaardfout (stderr):

Standaardfout of stderr is vergelijkbaar met standaard invoer en uitvoer, maar wordt gebruikt voor het opslaan van foutberichten. De standaardfout kan worden omgeleid naar de opdrachtregel of een bestand met behulp van een terminal. Als u berichten wilt opnemen of opslaan in een apart logbestand of de foutmeldingen wilt verbergen, zal het omleiden van stderr u helpen. Laten we nu naar de praktische kant van stdout en stderr omleiding gaan.



Stdout en stderr omleiden naar een bestand:

Omdat omleiding een methode is om een ​​programma-uitvoer vast te leggen en als invoer naar een ander commando of bestand te verzenden. De I/O-stromen kunnen worden omgeleid door de operator n> in gebruik te nemen, waarbij n het bestandsdescriptornummer is. Voor het omleiden van stdout gebruiken we 1> en voor stderr wordt 2> toegevoegd als operator.





We hebben een bestand gemaakt met de naam sample.txt om de omgeleide uitvoer op te slaan in onze huidige map.



De (opdracht > bestand) wordt beschouwd als de klassieke omleidingsoperator die alleen de standaarduitvoer omleidt met de standaardfout die in de terminal wordt weergegeven. We zullen ook verschillende opties demonstreren om stderr om te leiden.

Stderr en stdout omleiden om bestanden te scheiden:

Hieronder vindt u de opdrachtsyntaxis voor het omleiden van stdout en stderr naar afzonderlijke bestanden.

opdracht >uit2>fout

De onderstaande opdracht zal de uitvoer omleiden naar het out-bestand en foutmeldingen naar het foutbestand.

$katvoorbeeld.txt>uit2>fout

Stderr omleiden naar stdout:

Het is gebruikelijk om de stderr om te leiden met de standaarduitvoer van een programma om alles in een enkel bestand op te slaan. Hier is de opdrachtsyntaxis voor het omleiden van stderr naar stdout:

opdracht >uit2> &1$ls >voorbeeldbestand.txt2> &1

$katvoorbeeldbestand.txt

> out redirects leiden de stdout om naar samplefile.txt, en 2>&1 leidt de stderr om naar de huidige locatie van stdout.

Als stderr eerst wordt omgeleid naar stdout, gebruik dan de onderstaande opdracht om de stdout om te leiden naar een bestand.

opdracht 2> &1 > het dossier$ls -naar de 2> &1 >voorbeeldbestand.txt

$katvoorbeeldbestand.txt

&> wordt ook gebruikt voor dezelfde functionaliteit die 2>&1 uitvoert.

opdracht &> het dossier$ls &>voorbeeldbestand.txt

$katvoorbeeldbestand.txt

Stdout en stderr omleiden naar een enkel bestand:

Alle shells ondersteunen deze vormomleiding niet, maar bash en Zsh ondersteunen het. Stdout en stderr kunnen worden omgeleid door de volgende syntaxis te gebruiken.

opdracht &>uit$katvoorbeeld.txt&>uit

In het volgende gedeelte van het artikel zullen we het afzonderlijke voorbeeld bekijken voor stdout en stderr omleiding.

Stdout omleiden naar een bestand:

De standaarduitvoer wordt weergegeven door de 1 in de lijst met bestandsdescriptornummers. Voor een omleidingsopdracht zonder een bestandsdescriptornummer, stelt de terminal de waarde in op 1. De syntaxis voor het omleiden van de stdout naar een bestand wordt als volgt gegeven:

opdracht > het dossier

We gebruiken het sample.file voor het opslaan van de standaarduitvoer van het ls -al commando

$ls -naar de >voorbeeld.txt

$katvoorbeeld.txt

opdracht 1> het dossier$ls 1>voorbeeld.txt

$katvoorbeeld.txt

Stderr omleiden naar een bestand:

Gebruik de operator 2> om de stderr naar een bestand om te leiden.

opdracht 2> het dossier $ls -naar de 2>voorbeeld.txt

We kunnen de uitvoering voor stderr en stdout combineren in een enkele omleidingsopdracht.

opdracht 2>error.txt1>output.txt

In het onderstaande voorbeeld worden de foutmeldingen opgeslagen in error.txt, waar output.txt de standaarduitvoer van het ls-commando zal hebben.

$ls 2>error.txt1>output.txt

$katoutput.txt

Conclusie:

Het concept van omleiding en bestandsdescriptors voor I/O-streams is erg waardevol bij het werken in een Linux-terminal. In dit bericht hebben we het gehad over de reguliere I/O-streams, inclusief stdout en stderr. Het eerste gedeelte van dit bericht bevat gedetailleerde informatie over de omleiding, I/O-streams en de numerieke bestandsdescriptor. Vervolgens heb je het praktische voorbeeld gezien voor verschillende vormen van stdout en stderr omleiding.