2009-06-12 14 views
6

Ich möchte die Ausgabe des Befehls Zeit (die auf Standardfehler schreibt) in eine Variable erfassen. Ich weiß, dass dies wie dies getan werden kann:Capturing Standardfehler in eine Variable in Bash

 
    $ var=`time (mycommand &> /dev/null) 2>&1` 
    $ echo "$var" 
    real 0m0.003s 
    user 0m0.001s 
    sys  0m0.002s 

Mit dem innersten Redirect sendet Standard und Standardfehler von mycommand auf/dev/null, da es nicht nötig ist, und die äußerste Umleitung auf der Standardausgabe Standardfehler zu senden, so dass es in der Variablen gespeichert werden kann.

Mein Problem war, dass ich nicht in einem Shell-Skript arbeiten konnte, aber es stellt sich heraus, dass es wegen eines Fehlers anderswo war. Jetzt, wo ich diese Frage geschrieben habe, werde ich stattdessen fragen: Ist dies der beste Weg, dies zu erreichen, oder würdest du es anders machen?

Antwort

8

Die einzige Änderung, die ich machen würde, ist:

var=$(time (mycommand &> /dev/null) 2>&1) 

Die $() Befehlssyntax, wenn Sie Shell unterstützt es aus zwei Gründen überlegen ist:

  • keine Notwendigkeit, Schrägstriche zu entkommen,
  • Sie kann Befehle verschachteln, ohne Backticks zu umgehen.

Beschreibung der Unterschiede: Bash Command Substition

+1

+1 für die Bevorzugung $ (...) über '...' –

1

Wenn Sie wirklich nicht brauchen stdout oder stderr aus dem Programm zu sein, ist dies eine gute Möglichkeit, dies zu tun und sollte so effizient sein wie jede andere Methode.