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 ls
zien, 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/time
in plaats daarvan, die alle uitvoeromleidingen zeker accepteren.
Antwoord 5, autoriteit 4%
De reden waarom omleiding niet lijkt te werken met time
is 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 time
om 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 time
en het commando niet wilt mixen.
Met GNU-tijd kun je het -o file
gebruiken zoals:
/usr/bin/time -o tim grep -e k /tmp 1>out 2>err
terwijl tim
de tijd wordt uitgevoerd, zijn out
en err
stdout en stderr van grep
.
Antwoord 7
Ik gebruik de omleiding van de stdout- en stderr-methode met accolades om te testen.
De &>>rpt
staat voor deze >>rpt 2>&1
maar korter.
De accolades zullen een commando(‘s) in de huidige shell uitvoeren. Zie: man bash
{ time ls a*; } &>>rpt