だからこれは質問そのものではなく、ただ私が気になってする質問です。私はDebianのフォークであるLinux Mint MATEを使用しています。私がするなら:
ps afx | grep abcdefg
私は得る:
16599 pts/3 S+ 0:00 | \_ grep --color=auto abcdefg
だからgrepのプロセスを示しています。しかしそれは後ろにパイプラインで:上記のコードが実行され、結果が得られ、それに渡すとps
思いました。それでは、実際に結果に現れるのはなぜですか?これからもそうなるのではないでしょうか?パイプが実際にどのような用途に使用されるかについての基本的な知識が不足しているようです。ps
grep
grep
ps
ベストアンサー1
この質問は重複しており、unix.stackexchange.comに属しています。
要約すると、OpenGroupのシェルコマンド言語ドキュメントには、「に関する詳細は比較的あいまいです。管路":
パイプは、制御演算子「|」で区切られた1つ以上の命令シーケンスです。最後のコマンドを除くすべてのコマンドの標準出力は、次のコマンドの標準入力に接続する必要があります。
パイプの形式は次のとおりです。
[!] command1 [ | command2 ...]
コマンド1の標準出力は、コマンド2の標準入力に接続する必要があります。コマンドの標準入力、標準出力、またはその両方が、コマンドの一部としてリダイレクト演算子によって指定されたリダイレクトの前にパイプによって割り当てられているかのように処理する必要があります(リダイレクトを参照)。
パイプがバックグラウンドにない場合(非同期リストを参照)、シェルはパイプで指定された最後のコマンドが完了するまで待機し、可能であればすべてのコマンドが完了するまで待つ必要があります。
データがパイプラインから「左から右に」流れることは明らかですが、スケジュール自体は保証されません。
また見なさい: