次のコマンド置換操作を実行するにはどうすればよいですか?
$ time
real 0m0.000s
user 0m0.000s
sys 0m0.000s
$ oldtime="$(time)"
bash: command substitution: line 23: syntax error near unexpected token `)'
bash: command substitution: line 23: `time)"'
1行の出力が動作するため、コマンド出力に複数行があるため動作しないようです。
$ oldtime="$(echo hello)"
$ echo $oldtime
hello
答え1
time
stdoutには何も記録されていないので、何をキャプチャしたいのかわかりません。
$ time > tmpfile
real 0m0.000s
user 0m0.000s
sys 0m0.000s
そして、あなたは実際に何も「時間」を測定しません。
oldtime="$(time echo)"
エラーは発生しませんが、まだ時間を標準出力に出力します。
次のようなことをしたいかもしれません。
$ oldtime="$( { time ; } 2>&1 )"
答え2
このようなサブシェルで実行している場合times
。基本的に同じです。引数として渡されたパイプの処理時間を報告するのではなく、親シェルで使用された処理時間を報告することを除いて、(読み取り:コマンドサブシェル)親シェルが呼び出された後のすべての子 - 標準出力に書き込む必要があります。
だからあなたはこれを行うことができます:
pipeline_out=$(some | arbitrary | pipeline; times)
...すべてをキャッチ。
または、現在のシェルセッションの使用量の概要を確認してください。
times