2009-06-12 8 views
6

標準エラーに書き込むtimeコマンドの出力を変数に取り込みたいと思います。最も内側のリダイレクト、それが必要ではないですように/ dev/nullに標準出力とmycommandの標準誤差を送信し、その標準出力に標準エラーを送信し、最も外側のリダイレクトで標準エラーをbashの変数に取り込みます

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

:私は、これは次のように行うことができることを知っています変数に格納できることを示します。

私の問題は、シェルスクリプト内でこれを動作させることができないということでしたが、他のバグが原因であることが判明しました。だから私は先に進んでこの質問を書いた、代わりに私はこれを達成するための最良の方法ですか、それともあなたはそれを違うのですか?

答えて

8

私はなるだろう唯一の変更は、次のとおりです。

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

$()コマンドの構文あなたがシェルならば、それは二つの理由のために優れているサポートされています。あなたは

    • バックスラッシュをエスケープする必要はありませんバッククエストをエスケープしないでコマンドをネストすることができます。

    違いの説明:Bash Command Substition

  • +1

    +1 '...'の上に$(...)を好みます –

    1

    タイムアウトしているプログラムからstdoutやstderrを本当に必要としない場合は、これを行うには最適な方法で、他の方法と同じくらい効率的でなければなりません。

    関連する問題