time command1 | command2
またはtime
に適用されますか?あなたの答えが2つのうちの1つである場合、他のものはどのように指定しますか?command1
command1 | command2
bashの構文やシェルがコマンドを解釈する方法で答えを説明できますか?
シェルがコマンドを解析するとき、time
それを制御演算子として認識する前に予約語として認識しますか?予約語として認識されるものと制御演算子として認識される|
順序によって、またはに適用されるかが決まりますか?time
|
time
command1
command1 | command2
ありがとうございます。
ベストアンサー1
time command1 | command2
または
time
に適用されますか?command1
command1 | command2
time
通常、2つの方法で実装されます。外部コマンドと与えられたシェルの内部機能です。 (私は「関数」と呼びます。「関数」という理由は、シェルの実装方法によって異なりますが、予約語だと思うからです。したがって、time
システムに外部デバイスが1つ以上あると仮定すると、実際の答えは、ユーザーが実行しているシェルと(該当する場合)そのシェルtime
でどのように実装されるかによって異なります。。
タグによると、Bashを内部シェルとして使用しており、単純化のためにtime
GNUを外部シェルとして想定しています。time
大きな打撃time
:
- 予約語です。
- 完全なパイプラインに適用されます。
- 内部命令/関数/予約語と共に使用できます。
グヌtime
:
- 外部コマンドです。
- 簡単なコマンドで動作します。
- シェル内で呼び出されない限り、内部コマンド/関数/予約語と一緒に使用することはできません。
特定のシナリオでBashを実行するときにtime
適用します。command1 | command2
。使用しているシェルに内部がないがtime
システムに外部がある場合。time
command1
尋ねる:あなたの答えが2つのうちの1つである場合、他のものはどのように指定しますか?
Bashtime
の内部で動作する:command1
{ … }
制限に使用される範囲time
:{ time command1; } | command2
外部
time
コマンドを実行します。# Using the `command` builtin command time command1 | command2 # Using `env` env time command1 | command2 # Escaping/quoting the `time` word \time command1 | command2 'time' command1 | command2 # Explicitly running the external `time` command /usr/bin/time command1 | command2
GNUの場合:time
command1 | command2
time
パイプを外部ファイルに配置して実行します。
time ./script.sh
シェルを呼び出し、その中でパイプラインを実行します。
time sh -c 'command1 | command2'
尋ねる:bashの構文やシェルがコマンドを解釈する方法で答えを説明できますか?
Bashはそれを記録しますtime
。3.2.2 パイプラインマニュアル章:
パイプの形式は次のとおりです。
[time [-p]] [!] command1 [ | or |& command2 ] …
予約語は、
time
パイプラインが完了した後にタイミング統計を印刷します。
GNU文書は次のようにtime
提供されます。info time
man time
コマンドの形式は次
time
のとおりです。time [option...] COMMAND [ARG...]
time
COMMAND
与えられた引数を使ってプログラムを実行しますARG...
。COMMAND
完了すると、time
使用されたリソースに関する情報が表示されますCOMMAND
。
POSIX ドキュメント基準time
これは多くの実装の基礎となりますtime
。
要約
time [-p] utility [argument...]
説明する
ユーティリティーは、オペランドとして指定された引数を使用してオペランド
time
と呼ばれるユーティリティーを呼び出し、ユーティリティーのタイミング統計をリストする標準エラーにメッセージを書き込む必要があります。utility
argument
time
パイプラインの一部として使用される場合、報告された時間はグループ化されたコマンドの唯一のコマンドでない限り指定されません(参照:グループ化コマンド)このパイプラインから。基本的な
KornShellは、
time
単純なコマンドではなく、パイプライン全体の時間を測定するために使用できるシェル予約語です。 POSIX 定義の表現はこれらの実装を可能にします。
utility
代わりに、この用語は、command
シェル複合コマンド、パイプ、特殊な組み込みコマンドなどを直接使用できないことを強調するために使用されます。ただし、utility
これには標準ユーティリティだけでなく、ユーザーアプリケーションとシェルスクリプトも含まれます。
尋ねる:シェルがコマンドを解析するとき、
time
それを制御演算子として認識する前に予約語として認識しますか?|
Bashのマニュアルではこの情報を明示的に言及していませんが、POSIXは明確に次のように述べています。認識順序:
2.10.1 シェル構文と語彙規則
シェルの入力言語は、まず文字レベルで認識する必要があります。生成されたタグは、次の規則(順番に適用)に従って即時コンテキストで分類する必要があります。これらのルールは、トークンレベルで解析する「トークン」を決定するために使用する必要があります。トークン認識ルールトークン認識適用可能です。
- トークンがオペレータである場合は、そのオペレータのトークン識別子を生成する必要があります。
- 文字列が数字のみで構成され、区切り文字がまたはいずれ
<
かの場合は>
トークン識別子です。IO_NUMBER返す必要があります。- それ以外の場合はトークン識別子トークン結果。
もっと区別するトークン状況によって異なります。同じかもしれませんトークン生産する言葉、ㅏ名前、一つASSIGNMENT_WORD、または状況に応じて、次の予約語のいずれかを使用します。
簡単に言うと:演算子は予約語の前に認識されます。。
尋ねる:
time
予約語として認識されるものと制御演算子として認識される|
順序によって、またはtime
に適用されるかが決まりますか?command1
command1 | command2
予約語で予約されていても、パイプラインtime
全体ではなく単純なコマンドに適用するようにプログラムできます(ただし、これを実行するシェルはわかりません)。重要なのは、time
認識される順序ではなく、どのように実装されるかである。。