私は以下を使用して何かの時間を計ろうとしています:
/usr/bin/time myCommand
ただし、/usr/bin/time
以降 myCommand の場合、stderrに書き込みます また、stderrに書き込みます。ストリームでの時間の出力以上のものを取得します。私がやりたいのは、myCommandのすべての出力を/dev/null
にリダイレクトすることです。 、ただし、時間の出力をstderrに書き込みます。例を使用してmyCommand ls /nofile
のstderrに書き込みます 、(明らかに)次の出力がまったくないことがわかります:
$ /usr/bin/time ls /nofile 2> /dev/null
$
リダイレクトを行わないと、ls
からの両方の出力が表示されます。 (stderrへ)および時間からの出力(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
私が欲しいのは、単純に生成するものです:
$ /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
何かアイデアはありますか?
承認された回答:
ksh、bash、zshでは、time
はキーワードであり、組み込みではありません。同じ行のリダイレクトは、time
の出力ではなく、タイミングが設定されているコマンドにのみ適用されます。
$ time ls -d / /nofile >/dev/null 2>/dev/null
real 0m0.003s
user 0m0.000s
sys 0m0.000s
time
からの出力をリダイレクトするには これらのシェル自体では、追加レベルのグループ化を使用する必要があります。
{ time mycommand 2>&3; } 3>&2 2>mycommand.time
スタンドアロンのtime
のGNUバージョンを使用する場合 ユーティリティ、-o
があります time
の出力を書き込むオプション stderr以外の場所。 time
を作成できます ターミナルへの書き込み:
/usr/bin/time -o /dev/tty mycommand >/dev/null 2>/dev/null
time
からの出力を保持したい場合 標準エラーでは、追加レベルのファイル記述子シャッフルが必要です。
/usr/bin/time -o /dev/fd/3 mycommand 3>&2 >/dev/null 2>/dev/null
任意のtime
ユーティリティを使用すると、中間シェルを呼び出して、目的のリダイレクトを実行できます。 cd
などの追加のアクションを実行するための中間シェルの呼び出し 、リダイレクトなどはかなり一般的です。これは、シェルが実行するように設計された小さなことのようなものです。
/usr/bin/time sh -c 'exec mycommand >/dev/null 2>/dev/null'