このコマンドの実行にかかった時間を txt ファイルに書き込む必要があります。
time ./program.exe
どうすればbashスクリプトでできますか?
試してみまし>> time.txt
たが、うまくいきません(出力はファイルに送られず、画面に送られます)。
このコマンドの実行にかかった時間を txt ファイルに書き込む必要があります。
time ./program.exe
どうすればbashスクリプトでできますか?
試してみまし>> time.txt
たが、うまくいきません(出力はファイルに送られず、画面に送られます)。
ファイルtime
にbash
書き込むのは大変な作業です。bash
組み込みコマンドです。(Mac OS X には、同様の機能を実行する外部コマンド があり/usr/bin/time
ますが、出力形式が異なり、抵抗が少なくなります。)
以下を使用する必要があります。
(time ./program.exe) 2> time.txt
標準エラーに書き込みます(したがって、2>
表記法)。ただし、サブシェル (括弧) を使用しないと機能しません。出力は引き続き画面に表示されます。
または、サブシェルなしで、次を使用できます。
{ time ./program.exe; } 2> time.txt
左中括弧とセミコロンの後のスペースに注意してください。両方とも 1 行で必要です。中かっこは、コマンドが表示される可能性のある場所に表示する必要があり、スタンドアロンのシンボルである必要があります。...;}|something
(十分に苦労すれば、 orを思いつくでしょう...;}2>&1
。ただし、これらは両方ともブレースをスタンドアロンのシンボルとして識別します。ただし、 を試みる...;}xyz
と、シェルは (おそらく) というコマンドを見つけられません}xyz
。)
more ターミナルで more コマンドを実行する必要があります。私がこれを行う場合:
xterm -xrm '*hold: true' -e (time ./Program.exe) >> time.exe & sleep 2
それは機能せず、教えてくれ
Syntax error: "(" unexpected
ます。これを修正するにはどうすればよいですか?
次のようなことをする必要があります:
xterm -xrm '*hold: true' -e sh -c "(time ./Program.exe) 2> time.txt & sleep 2"
重要な変更点は、引数から-c
オプションへのスクリプトを使用してシェルを実行することです。または同等の名前sh
に置き換えることができます。/bin/bash
これにより、「構文エラー」の問題を回避できます。ただし、何がそのエラーを引き起こすのかよくわからないので、より簡単でより良い対処方法があるかもしれません. xterm
のオプションが単一の文字列引数しかとらないことも考えられ-e
ます。その場合、次を使用すると思います。
xterm -xrm '*hold: true' -e 'sh -c "(time ./Program.exe) 2> time.txt & sleep 2"'
xterm
私と同じように手動でバッシュできます。
時間指定プログラムをバックグラウンド モードで実行する理由はわかりませんが、それはあなたの問題であって、私の問題ではありません。同様に、がターミナルを開いたままにsleep 2
しておく場合は、明らかに必要ありません。hold: true
time_elapsed = (time sh -c "./program.exe") 2>&1 | grep "real" | awk '{print $(NF)}'
echo time_elapsed> file.txtこのコマンドは、目的のファイルのbashで消費された正確な時間を提供する必要があります。
別の返信で説明されているように、これを2>file.txtを使用してファイルにリダイレクトすることもできます。
bash builtin の出力をリダイレクトするのは簡単ではありませんtime
。
1 つの解決策は、外部time
プログラムを使用することです。
/bin/time --append -o time.txt ./program.exe
(ほとんどのシステムでは GNU プログラムなので、ドキュメントを入手するのinfo time
ではなく使用してください)。man
コマンドを time で囲むだけ{ .. }
です。
{ time ./program.exe; } 2>&1
もちろん、ビルトイン time の出力は stderr に送られるため、リダイレクトが必要です2>&1
。
次に、出力をキャプチャするのが難しいように見えるかもしれません{ .. }
。コマンドをより簡単に読み取るために 2 秒を使用してみましょう。これは機能します。
{ { time ./program.exe; } 2>&1; } >> time.txt # This works.
ただし、正しい構成では、次のようにキャプチャを逆にする必要があります。
{ time ./program.exe; } >> time.txt 2>&1; # Correct.
コマンドからの出力を閉じるには、次のように出力を /dev/null にリダイレクトします。
{ time ./program.exe >/dev/null 2>&1; } >> time.txt 2>&1 # Better.
そして、stderr には出力しかないため、単純にキャプチャすることができます。
{ time ./program.exe >/dev/null 2>&1; } 2>> time.txt # Best.
./program からの出力はリダイレクトする必要があります。そうしないと、time.txt 内で終了する可能性があります。