あるコマンドが別のコマンドにパイプされると、パイプ出力はどのような形式または形式で存在/送信されますか?一時ファイルですか?文字列ですか?パイプ出力を受け取るコマンドはどのようにその出力をデコード/読み込みますか?
例:
echo "Someone string" | ./program | tail
program
プログラム ""は出力をファイルとして受け取りますか?echo
プログラムはこの入力をどのように読みますか?
ベストアンサー1
パイプは、Linuxや他のUnix系オペレーティングシステムで使用されるリダイレクト(標準出力を別のターゲットにパイプする)の一形態です。 。 Unix / Linuxシステムでは、あるコマンドのstdoutを別のコマンドのstdinに接続できます。これを実現するには、パイプ文字「|」を使用できます。
パイプは、2つ以上のコマンドを結合するために使用されます。ここで、あるコマンドの出力は別のコマンドの入力として使用され、そのコマンドの出力は次のコマンドの入力として使用できます。 2つ以上のコマンド/プログラム/プロセス間の一時的な接続と見なすこともできます。追加処理を実行するコマンドラインプログラムをフィルタと呼びます。
コマンド/プログラム/プロセス間のこれらの直接接続を介して同時に実行することができ、一時テキストファイルまたはディスプレイを介してデータを渡さずにデータを継続的に転送できます。パイプは一方向です。つまり、データはパイプを通って左から右に流れます。
通事論:
command_1 | command_2 | command_3 | .... | command_N
例:moreコマンドへの入力として、すべてのファイルとディレクトリを一覧表示します。
$ ls -l | more
このmore
コマンドは出力をls -l
入力として使用します。このコマンドの最終的な効果は、ls -l
一度に1つの出力画面を表示することです。パイプはコンテナとして機能し、出力を受け取り、ls -l
それをmore
入力に渡します。このコマンドはパイプがメインメモリに実装されているため、標準出力をls -l
標準入力に接続するためにディスクを使用しません。more
I/O リダイレクト演算子に関して、上記のコマンドは次のコマンドの順序と同じです。
$ ls -l -> temp
more -> temp (or more temp)
[contents of temp]
rm temp