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

2番目のパイプコマンドでのみBashTimeキーワードの結果、理由を説明しますか?

完全には説明できないbashtimeキーワードコマンドがありますが、それは機能します。

私の目標:

  1. bashスクリプト内から、変数btwを受け取るPythonスクリプトの実行時間を見つけて、その値を取得します。

  2. また、成功または失敗の分析のために、Pythonスクリプトの出力を同じ変数にキャプチャします。

読んだ後、私はこのコマンドに行き着きましたが、それを完全に説明することはできません。

ttime=$( (TIMEFORMAT="%U^"; time  /../myscript.py ${__myvar} 2>&1 )|& tr -d f)

2番目のコマンドtr -d fが必要な理由を説明してください パイプ内で、コマンドの出力に追加される時間値について

'tr -d f'の選択は完全に任意であり、スクリプトの出力、stdまたはerrには影響しませんが、それがない場合、またはスクリプトのテキスト出力にマイナーな方法で作用する別のコマンドがない場合は、時間が追加されていないPython、なぜですか?

編集:

本当の問題は、なぜ|& tr -d fなのかということでした。 。必要であり、ステファニーが言うように、時間キーワードからsterrで見つかったタイミングをパイプライン出力に渡すことができるのは|&です

ソリューションは次のようになります:

ttime=$(TIMEFORMAT="%U^"; { time /../myscript.py ${__myvar} ; } 2>&1 )

フィールド記述子チュートリアル:

http://wiki.bash-hackers.org/howto/redirection_tutorial

承認された回答:

bashで 、kshのように 、time キーワードです (組み込みではない)パイプラインの時間を計測するために使用されます (単純なコマンドだけでなく、複合コマンドの時間を計ることもできます。)

time cmd 2> somethingで 、cmd 2> somethingのタイミングをとっています 出力をstderrに出力しますが、元のstderrに出力します。

stderrを前にリダイレクトする必要があります time コンストラクトが呼び出されます。 |&でどちらを行うか サブシェルのtimeのstdoutとstderrをリダイレクトします が実行されますが、それを行うためのはるかに簡単な方法は次のようになります:

time=$(TIMEFORMAT="%U^"; { time cmd; } 2>&1)

これにはサブシェルは含まれません(ここではコマンドグループを使用します) 代わりに)または追加のコマンドもありません。

bashを使用することに注意してください :

time=$(time (cmd) 2>&1)

偶然に動作します。将来のバージョンで変更される可能性があり、timeを持つ他のシェルでは機能しないため、これには依存しません。 キーワード。

$timeのタイミング出力のみが必要な場合 (コマンドのstdoutやstderrではありません)、次のようにします:

{ time=$(TIMEFORMAT="%U^"; { time cmd 2>&3 3>&-; } 2>&1); } 3>&1

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

  2. Bashの制御演算子と組み合わせたコマンド

  3. 色を保持した bash watch コマンド

  1. 初心者向けのLinuxタイムコマンドチュートリアル(例付き)

  2. `set -e`を使用したBashスクリプトは`…&&…`コマンドで停止しませんか?

  3. 「&」を使用して Linux シェル コマンドを実行するのはなぜですか?

  1. Bashで合法的なコマンドの前に変数を設定するのはなぜですか?

  2. BashスクリプトのRmコマンドは変数では機能しませんか?

  3. 15 の便利な Bash シェル組み込みコマンド (例付き)