完全に説明できないbash timeキーワードコマンドがありますが、私にとっては効果的です。
私の目標:
bashスクリプトから変数btwを取得し、値をキャプチャするPythonスクリプトの実行時間を見つけます。
成功または失敗の分析のために、同じ変数からPythonスクリプトの出力をキャプチャすることも可能です。
周囲を読んだ後、このコマンドを使用しましたが、説明することはできません。
ttime=$( (TIMEFORMAT="%U^"; time /../myscript.py ${__myvar} 2>&1 )|& tr -d f)
tr -d f
時間値がコマンド出力に追加されるようにパイプラインで2番目のコマンドが必要な理由を説明しますか?
"tr -df"の選択は完全に任意であり、私のスクリプトの出力、std、またはerrには影響しません。ただし、このオプションやスクリプトのテキスト出力に対してマイナーな方法で動作する他のコマンドがない場合は、次のことがわかります。 Pythonが戻ったときに余分な時間はありません。なぜですか?
編集する:
実際の質問は「なぜ」でなければなりません|& tr -d f
。 Stephanieが言ったように、|&はtimeキーワードのsterrで見つかったタイミングをパイプ出力に渡すことを可能にします。
今解決策は次のとおりです。
ttime=$(TIMEFORMAT="%U^"; { time /../myscript.py ${__myvar} ; } 2>&1 )
フィールド記述子チュートリアル:
ベストアンサー1
inbash
は inksh
とtime
同様キーワード(内蔵されていない)タイミング管路(簡単なコマンドだけでなく、複合コマンドも時間を設定できます。)
time cmd 2> something
私たちは出力をstderrに時間を合わせてcmd 2> something
印刷しますが、生のstderrで印刷します。
stderrをリダイレクトする必要があります。今後コンストラクタがtime
呼び出されます。|&
サブシェルのstdoutとstderrリダイレクトを使用してこれを実行できますが、time
より簡単な方法は次のとおりです。
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