Linuxは、結合されたリダイレクトを実行するコマンドでの作業順序をどのように決定しますか?

Linuxは、結合されたリダイレクトを実行するコマンドでの作業順序をどのように決定しますか?

私たちが知っているように、次のコマンドの出力はファイルにless --help | grep -i examineリダイレクトされます。少ないファイル数を確認してください。BODMAS rule、Linuxは数学のような普遍的な操作順序を使用しますか?

less --help | grep -i examine > examine-files-in-less

ベストアンサー1

パイプラインに関連するすべてのコマンド(問題のコマンドなど)は(ほぼ)同時に開始されます。

これは、パイプラインのコマンドがたとえば次のようになることを意味します。

find . ...some other arguments... | sort | uniq -c | sort -nr

すべて並列に実行されます。

ただし、1つのコマンドの出力は次のコマンドの入力であり、コマンドは入力が渡されて出力が消費されるのを待つため、データはパイプラインでコマンドを同期します。

たとえば、上記のパイプラインでは最後のパイプラインが実行されますが、sort最初のパイプラインがすべての出力を消費するまで多くの操作は実行されません(ソート操作ではfindsortみんな利用可能なデータを読みました)。

したがって、データは左から右にソートする必要があります。処理配管に仕上げました。

listなどの他の複合コマンドで

ls -l; cat somefile

これは次のとおりです。

ls -l
cat somefile

左から右の順序が厳密に適用されます。完了するまで開始されませんcatls

複合コマンドでは、次のようになります。

test -f filename || echo 'no such file'

また、終了ステータスが 0 に返されると、echo実行されない厳密な左から右の順序もあります。test

たとえば、Bashのブールテスト&&と||関連問題「そして」論理演算子とセミコロンの優先順位」。

おすすめ記事