名前付きパイプの実用的な使用の最良の例の 1 つ...
http://en.wikipedia.org/wiki/Netcat から:
<ブロック引用>
別の便利な動作は netcat
を使用することです プロキシとして。ポートとホストの両方をリダイレクトできます。この例を見てください:
nc -l 12345 | nc www.google.com 80
ポート 12345 はリクエストを表します。
これは nc
を開始します サーバーをポート 12345 に接続すると、すべての接続が google.com:80
にリダイレクトされます . Web ブラウザが nc
にリクエストした場合 、リクエストは Google に送信されますが、レスポンスは Web ブラウザに送信されません。これは、パイプが単方向であるためです。これは、名前付きパイプを使用して入力と出力をリダイレクトすることで回避できます。
mkfifo backpipe
nc -l 12345 0<backpipe | nc www.google.com 80 1>backpipe
コマンドは次のとおりです:
$ mkfifo named_pipe
$ echo "Hi" > named_pipe &
$ cat named_pipe
最初のコマンドはパイプを作成します。
2 番目のコマンドはパイプに書き込みます (ブロッキング)。 &
これをバックグラウンドに置くので、同じシェルでコマンドを入力し続けることができます。次のコマンドで FIFO が空になると終了します。
最後のコマンドはパイプから読み取ります。
2 つの異なるシェルを開き、それらを並べたままにします。両方とも、/tmp/
に移動します。 ディレクトリ:
cd /tmp/
最初のタイプ:
mkfifo myPipe
echo "IPC_example_between_two_shells">myPipe
2 番目に、次のように入力します。
while read line; do echo "What has been passed through the pipe is ${line}"; done<myPipe
最初のシェルは、2 番目のシェルでコードの 2 番目の部分を実行するまでプロンプトを返しません。 fifo の読み取りと書き込みがブロックされているためです。
ls -al myPipe
を実行して、FIFO タイプを確認することもできます。 この特定の種類のファイルの詳細を確認してください。
次のステップは、コードをスクリプトに組み込むことです!