GNU/Linux >> Znalost Linux >  >> Linux

Přesměrovat výstup příkazu v „příkazu času“?

Snažím se něco načasovat pomocí:

/usr/bin/time myCommand

Nicméně, protože /usr/bin/time zapíše do stderr, pokud myCommand také píše do stderr, dostanu více než jen výstup času ve streamu. Co chci udělat, je přesměrovat veškerý výstup myCommand na /dev/null , ale přesto zapište výstup času do stderr. Pomocí příkladu myCommand který zapisuje do stderr z ls /nofile , vidíme, že (samozřejmě) neexistuje žádný výstup s následujícím:

$ /usr/bin/time ls /nofile 2> /dev/null
$

Bez jakéhokoli přesměrování vidíme oba výstup z ls (do stderr) a výstup z času (také do stderr):

$ /usr/bin/time ls /nofile
ls: cannot access /nofile: No such file or directory
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3776maxresident)k
0inputs+0outputs (0major+278minor)pagefaults 0swaps

Chci něco, co jednoduše produkuje:

$ /usr/bin/time ls /nofile > RedirectThatImAskingFor
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3776maxresident)k
0inputs+0outputs (0major+278minor)pagefaults 0swaps

Nějaké nápady?

Přijatá odpověď:

V ksh, bash a zsh, time je klíčové slovo, nikoli vestavěné. Přesměrování na stejném řádku platí pouze pro časovaný příkaz, nikoli pro výstup time sám.

$ time ls -d / /nofile >/dev/null 2>/dev/null

real    0m0.003s
user    0m0.000s
sys     0m0.000s

Přesměrování výstupu z time sám v těchto shellech, musíte použít další úroveň seskupování.

{ time mycommand 2>&3; } 3>&2 2>mycommand.time

Pokud používáte GNU verzi samostatného time nástroj, má -o možnost zapsat výstup time jinde než stderr. Můžete si udělat time napište do terminálu:

/usr/bin/time -o /dev/tty mycommand >/dev/null 2>/dev/null

Pokud chcete zachovat výstup z time při standardní chybě potřebujete další úroveň promíchání deskriptoru souboru.

/usr/bin/time -o /dev/fd/3 mycommand 3>&2 >/dev/null 2>/dev/null

S jakýmkoli time můžete vyvolat mezilehlý shell k provedení požadovaných přesměrování. Vyvolání mezilehlého shellu k provedení zvláštních akcí, jako je cd , přesměrování atd. je docela běžné – je to druh maličkostí, ke kterým jsou shelly navrženy.

/usr/bin/time sh -c 'exec mycommand >/dev/null 2>/dev/null'

Linux
  1. Jak používat Linux Touch Command + příklady

  2. Najděte čas provedení příkazu nebo procesu v systému Linux

  3. Příklady příkazů času Linux

  1. Jak připojit výstup do souboru?

  2. Jak přesměrovat výstup system() do souboru?

  3. Jak přesměrovat výstup příkazu do souboru, když příkaz vyzve uživatele k zadání?

  1. Naplánujte si úlohu pomocí příkazu Linux at

  2. CentOS / RHEL :Jak získat datum a čas provedeného příkazu ve výstupu příkazu historie

  3. Přesměrovat výstup příkazu time v unixu do proměnné v bash?