Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

プロセス間で文字列の受け渡しをしたい場合、/proc/$(PID)/fd/$(NUM)が使える……かも?

/proc/$(PID)/fd/$(NUM)とは……
PIDに繋がってるI/Oに対し文字列を流し込む超絶技です。
0は標準入力、1は標準出力、2は標準エラー。3以降は設定していれば別途使えます。

実際のところ

標準入力から文字を受け取って処理、終了するsort.rbというスクリプトがあったとします。
これを、こんな感じで呼び出します。

$ cat | ruby sort.rb &

catは何にも引数をつけなければユーザからの入力待ちになりますね。
……普通は。

ここで、別のシェル画面なり
データが格納されたsample.pktをcatなりで呼び出し、表題のコマンドで使ってあげると……

$ cat sample.pkt > /proc/$(pidof cat)/fd/1

ruby.rbが所定の処理を行ってくれます。
しかも、rubyに繋がったcatは停止しないので引き続き処理をぶっこむ事が可能です。
catを停止したい場合は、

$ kill -9 $(pidof cat)

てな感じで別途けしてあげるか、受信待機中の画面でエンターを叩けば停止します。