GNU/Linux >> Linux Esercitazione >  >> Linux

Reindirizzare l'output di un comando in `time Command`?

Sto cercando di cronometrare qualcosa usando:

/usr/bin/time myCommand

Tuttavia, poiché /usr/bin/time scrive su stderr, se myCommand scrive anche a stderr, otterrò più di un semplice output di tempo sullo stream. Quello che voglio fare è reindirizzare tutto l'output di myCommand a /dev/null , ma continua a scrivere l'output del tempo su stderr. Utilizzando un esempio myCommand che scrive su stderr di ls /nofile , vediamo che (ovviamente) non c'è alcun output con quanto segue:

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

Senza alcun reindirizzamento, vediamo sia l'output di ls (a stderr) e l'output da tempo (anche a 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

Quello che voglio è qualcosa che produca semplicemente:

$ /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

Qualche idea?

Risposta accettata:

In ksh, bash e zsh, time è una parola chiave, non un built-in. I reindirizzamenti sulla stessa riga si applicano solo al comando in fase di temporizzazione, non all'output di time stesso.

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

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

Per reindirizzare l'output da time stesso in queste shell, è necessario utilizzare un livello aggiuntivo di raggruppamento.

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

Se usi la versione GNU dello standalone time utilità, ha un -o opzione per scrivere l'output di time altrove che stderr. Puoi creare time scrivi al terminale:

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

Se vuoi mantenere l'output da time sul suo errore standard, è necessario un livello aggiuntivo di shuffle del descrittore di file.

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

Con qualsiasi time utilità, è possibile invocare una shell intermedia per eseguire i reindirizzamenti desiderati. Invocare una shell intermedia per eseguire azioni extra come cd , reindirizzamenti e così via è piuttosto comune: è il tipo di piccole cose per cui sono progettate le shell.

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

Linux
  1. Esempi di comandi temporali di Linux

  2. L'output del comando reindirizza al file e al terminale

  3. Come reindirizzare l'output di un comando a un file quando il comando richiederà gli input dell'utente?

  4. Reindirizzare l'output del comando time in unix in una variabile in bash?

  5. Nascondere l'output di un comando shell solo in caso di successo?

Comando dell'ora di Linux

Come reindirizzare l'output del comando della shell

Tracciare il tempo con Timewarrior alla riga di comando

Cerca testo sull'output del terminale?

Comprendere il comando dell'ora in Linux

Come reindirizzare l'output del comando time su un file in Linux?