time コマンドの出力は bash スクリプトの変数に送られます。

time コマンドの出力は bash スクリプトの変数に送られます。

同様の質問があることを知っていますが、私の状況に十分近い質問が見つかりませんでした...

次のように、bashスクリプトでコマンド時間を測定する必要があります。

mytime="$(time ( ls ) 2>&1 1>null)"
rm null

これは素晴らしい作品です。ただしls、これをより複雑なものに変更しようとすると問題が発生します。

command="$reg 1d_euler_2nd.rg -nc $nc -ll:cpu $np -ns $nstop"
mytime="$(time ( $command ) 2>&1 1>null)"
rm null

reg環境変数、、、ncおよびnpnstopすべて私のスクリプトで定義されています。このコードを使用しようとすると、次のエラーが発生します。

(standard_in) 1: syntax error
(standard_in) 1: illegal character: :
(standard_in) 1: illegal character: :
(standard_in) 1: illegal character: $
(standard_in) 1: syntax error
(standard_in) 1: illegal character: :
(standard_in) 1: syntax error
(standard_in) 1: syntax error
(standard_in) 1: illegal character: :

どんな助けでも大変感謝します!

申し訳ありません。最小限の作業例を作成しようとしたときに、問題が私のコードの他の場所にあることに気づきました。

答え1

timeサブシェルを使用して出力を個別にキャプチャできます。いいえ変数を使用してコマンドを抽象化します。簡単に簡単な例は次のとおりです。

$ time ( echo "Hello" > example.out 2> example.err ) > time.out 2> time.err
$ ls *{out,err}
example.err example.out time.err    time.out
$ cat time.err

real    0m0.000s
user    0m0.000s
sys     0m0.000s
$ cat example.out
hello

関連情報