ファイルからの読み取りが実際にstdout
から読み取られるように、仮想ファイルを作成する方法はありますか? コマンドの;ファイルへの書き込みは、実際にはstdin
への書き込みです。 コマンドの?
これまでのところ、これをinotifywait
で判断しました。 ファイルに対して、ファイルが変更されたときにコマンドを呼び出し、ファイルから入力を取得して書き戻します。
inotifywait
が気に入らない ただし、常に再起動する必要があります(そして、常に実行されていることを確認する必要があります)。このファイルはおそらく週に2回しか使用していません。
承認された回答:
名前付きパイプを探している可能性があります。
mkfifo f
{
echo 'V cebqhpr bhgchg.'
sleep 2
echo 'Urer vf zber bhgchg.'
} >f
rot13 < f
パイプに書き込んでも、リスニングプログラムは開始されません。入力をループで処理する場合は、リスニングプログラムを実行し続ける必要があります。
while true; do rot13 <f >decoded-output-$(date +%s.%N); done
複数のプロセスが書き込まれている場合でも、パイプに書き込まれるすべてのデータがマージされることに注意してください。複数のプロセスが読み取っている場合、1つだけがデータを取得します。そのため、パイプは同時発生の状況には適さない場合があります。
名前付きソケットは同時接続を処理できますが、これは基本的なシェルスクリプトの機能を超えています。
スケールの最も複雑な端にあるのはカスタムファイルシステムです。これにより、各open
でファイルシステムを設計およびマウントできます。 、write
など、プログラム内の関数をトリガーします。最小の投資額は、たとえばPythonの場合、数十行の重要なコーディングです。ファイルを読み取るときにのみコマンドを実行する場合は、scriptfsまたはfusefltを使用できます。