私は以下を使って時間を測定しようとしています。
/usr/bin/time myCommand
しかし/usr/bin/time
、stderrに書いて以来、私の注文また、stderrに書き込むと、ストリームの時間出力以上の結果が得られます。私が望むのはmyCommandのすべての出力を次にリダイレクトします/dev/null
が、まだstderrに時間出力を書き込むことです。使用例私の注文stderr of に書き込むと、ls /nofile
以下のように出力がまったく表示されません。
$ /usr/bin/time ls /nofile 2> /dev/null
$
リダイレクトせずに出力(stderrに)ls
と時間(また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
どんなアイデアがありますか?
答え1
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
スタンドアロンGNUバージョンを使用する場合time
オプションで、stderr以外の場所-o
に出力を書き込むユーティリティです。端末に書き込むtime
ことができます: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'
答え2
[artur@asus-ux21e ~]$ find /etc/pki/CA/private/
/etc/pki/CA/private/
find: ‘/etc/pki/CA/private/’: Permission denied
[artur@asus-ux21e ~]$ time (find /etc/pki/CA/private/ &> /dev/null)
real 0m0.006s
user 0m0.001s
sys 0m0.004s