Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

プロセス間で文字列の受け渡しをしたい場合、/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)

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