理由

理由

私はこれを持っています:

 tail -f "${my_input}" | ql_receiver_lock_holder > "${my_named_pipe}" & disown;

しかし、この回答を読んだ後は次のようになります。 最初のデータがパイプに書き込まれます(一貫性があるかどうか)。

${my_named_pipe}が${my_input}ファイルからデータを受信できないようです。

この問題を解決する方法を知る唯一の方法は次のとおりです。

tail -f "${my_input}" | ql_receiver_lock_holder | while read line; do
   echo "$line" > ${my_named_pipe};
done & disown;

これを行う他の方法はありますか?

答え1

my_named_pipe最初から存在する場合、つまり生成しql_receiver_lock_holderないと動作し、そうでなければ動作しません。

以下の例では、関係のないコンテンツをすべて削除しました。質問は非常に一般的なので、答えも非常に一般的です。

これは働きます:

a-process | another-process > "${my_named_pipe}"

以下は行われません。

a-process | another-process-that-also-creates-the-pipe > "${my_named_pipe}"

理由

まず、動作を妨げることはありません。質問にリンクされている質問は、標準入力(標準出力ではない)リダイレクトを意味します。今回も入力が得られませんprocess1 > a-file | process2process2

第2の例では、パイプが存在するまでパイプを接続することはできない。すべての配管作業は、プロセスが開始される前に完了する必要があります。現在、パイプ接続を作成するためにプロセスに信号を送信する方法はありません。そして、そのプロセスを直接実行するよりも簡単なことはありません。

関連情報