Intro
Soms zien we commando’s als deze in de shell:
- $ ls foo > /dev/null 2>&1
Het is misschien moeilijk te begrijpen wat dit doet voor de eerste keer, dus deze nota zal het kort uitleggen.
I/O Redirection
Stel dat u nu een eenvoudig tekstbestand hebt:
Nu de inhoud van dit bestand omleiden naar een andere locatie:
Er is een fout opgetreden tijdens het doorstuurproces omdat er geen bestand met de naam no_such_file.txt in de huidige map staat. In dit geval is het, ook al wordt het > commando gebruikt, niet mogelijk om de inhoud in output.txt in te voeren, omdat er geen stdout is, maar een foutmelding van stderror in de plaats komt.
File Descriptor
File descriptor kan worden gezien als een positief geheel getal voor een open bestand. Als je 100 open bestanden hebt, heb je in principe 100 corresponderende file descriptors.
In Unix/Unix-achtige systemen, zijn er ook file descriptors gewijd aan stdout en stderr, die, om duidelijk te zijn, speciale bestemmingen hebben voor de uitvoer van dezevoor deze uitvoerbestemmingen:
- 1: voor stdout
- 2: voor stderr
Het geheel samenvoegen
Volgens het bovenstaande concept, als u de inhoud van een bekend bestand naar een ander bestand wilt schrijven, kunt u dat doen
De 1 aan deze kant staat voor stdout, waarvan de syntaxis wordt weergegeven als:
- >
Dus als je iemand ziet schrijven van.foo > naar.bar, dan laat hij gewoon de
Ook om stderr om te leiden kunt u dit doen:
Als u zowel stdout als stderr naar dezelfde bestemming wilt omleiden, kunt u dat doen
- &1 wordt gebruikt als verwijzing naar een bestandsdescriptor-id van 1, d.w.z. een verwijzing naar stdout.
- 2>&1 betekent dat de inhoud van stderr wordt omgeleid naar stdout.
Summary
- Er zijn gewoonlijk twee bestemmingen voor de uitvoer: stdout en stderr.
- We kunnen de uitvoer naar verschillende plaatsen sturen, maar gewoonlijk naar een bestand.
- File descriptor kan worden gebruikt om onderscheid te maken tussen stdout (1) en stderr (2).
- commando > output_location is eigenlijk een afkorting van commando 1> output_location.
- We kunnen & gebruiken om naar andere file descriptors te verwijzen.