GNU/Linux >> Linux の 問題 >  >> Linux

`time Command`でコマンドの出力をリダイレクトしますか?

私は以下を使用して何かの時間を計ろうとしています:

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

Linux
  1. CentOS / RHEL :history コマンド出力で実行されたコマンドの日時を取得する方法

  2. 出力をファイルに追加する方法は?

  3. system() の出力をファイルにリダイレクトする方法は?

  1. Linuxatコマンドでタスクをスケジュールする

  2. Linuxでのコマンドまたはプロセスの実行時間を検索する

  3. UNIXのtimeコマンドの出力をbashの変数にリダイレクトしますか?

  1. LinuxTouchコマンドの使用方法+例

  2. コマンドの出力をシェル変数に割り当てる方法は?

  3. 「最後の」コマンドの出力?