コマンドの複数行出力のコマンドの置き換え?

コマンドの複数行出力のコマンドの置き換え?

次のコマンド置換操作を実行するにはどうすればよいですか?

$ 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

timestdoutには何も記録されていないので、何をキャプチャしたいのかわかりません。

$ 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

関連情報