Hoe kan ik de uitvoer van het “time” commando omleiden?

Ik heb geprobeerd de uitvoer van het tijdcommando om te leiden, maar dat lukte niet:

$time ls > filename
real    0m0.000s
user    0m0.000s
sys     0m0.000s

In het bestand kan ik de uitvoer van de opdracht lszien, niet die van time.
Leg alsjeblieft uit waarom ik dat niet kon en hoe ik dit moest doen.


Antwoord 1, autoriteit 100%

het is niet nodig om sub-shell te starten. Een codeblok gebruiken is ook voldoende.

{ time ls; } 2> out.txt

of

{ time ls > /dev/null 2>&1 ; } 2> out.txt

Antwoord 2, autoriteit 81%

u kunt de tijduitvoer omleiden met,

(time ls) &> file

Omdat je (time ls) als een enkele opdracht moet nemen, zodat je accolades kunt gebruiken.


Antwoord 3, autoriteit 20%

De commandotijd stuurt zijn output naar STDERR (in plaats van STDOUT). Dat komt omdat het commando dat met de tijd wordt uitgevoerd normaal (in dit geval ls) wordt uitgevoerd naar STDOUT.

Als u de output van tijd wilt vastleggen, typt u:

(time ls) 2> filename

Dat legt alleen de uitvoer van tijd vast, maar de uitvoer van ls gaat normaal naar de console. Als u beide in één bestand wilt vastleggen, typt u:

(time ls) &> filename

2> omleidt STDERR, &> leidt beide om.


Antwoord 4, autoriteit 8%

time is ingebouwd in de shell en ik weet niet zeker of er een manier is om het om te leiden. U kunt echter
/usr/bin/timein plaats daarvan, die alle uitvoeromleidingen zeker accepteren.


Antwoord 5, autoriteit 4%

De reden waarom omleiding niet lijkt te werken met timeis dat het een bash gereserveerd woord is (geen ingebouwd!) wanneer het voor een pijplijn wordt gebruikt. bash(1):

Als het gereserveerde tijdwoord voorafgaat aan een pijplijn, worden zowel de verstreken als de
gebruikers- en systeemtijd verbruikt door de uitvoering ervan worden gerapporteerd wanneer de
pijplijn eindigt.

Dus, om de uitvoer van timeom te leiden, gebruik je ofwel accolades:

{ time ls; } 2> filename

Of bel /usr/bin/time:

/usr/bin/time ls 2> filename

Antwoord 6, autoriteit 3%

Als je de uitvoer van timeen het commando niet wilt mixen.
Met GNU-tijd kun je het -o filegebruiken zoals:

/usr/bin/time -o tim grep -e k /tmp 1>out 2>err

terwijl timde tijd wordt uitgevoerd, zijn outen errstdout en stderr van grep.


Antwoord 7

Ik gebruik de omleiding van de stdout- en stderr-methode met accolades om te testen.
De &>>rptstaat voor deze >>rpt 2>&1maar korter.
De accolades zullen een commando(‘s) in de huidige shell uitvoeren.   Zie: man bash

{ time ls a*; } &>>rpt

Other episodes