名前付きパイプとパイプからワーカープロセスとして読む

名前付きパイプとパイプからワーカープロセスとして読む

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

delete_lock(){
  first_arg=$1
}

node x.js | delete_lock $0 < ${my_named_pipe} &

my_named_pipeからNode.jsプロセスの標準入力を読み、いくつかの入力に基づいてNode.jsプロセスの標準出力に書き込んでからdelete_lockでキャプチャしようとしています。

私の主な質問は、bashのdelete_lockでstdinをどのように参照していますか? 0ドルではないようですが、どうすればいいですか?

これが唯一の方法ですか?

node x.js | { while read line; delete_lock $line; } < ${my_named_pipe} &

答え1

パイプからデータを読み取るにはノードアプリケーションが必要だったので、次のようにします。

node x.js <"$my_named_pipe"

その後、関数が出力を読みたいと言ったら、そうします。

node x.js <"$my_named_pipe" | delete_lock

これは|コマンドターミネーターです。つまり、

command1 | command2 <thing

command2で読みますthing


コメントに返信:

このdelete_lock関数は、Nodeアプリケーションから標準入力を読み込みます。たとえば、Nodeアプリケーション出力のパターンに基づいて操作を実行する必要がある場合は、次のことを使用できますgrep

delete_lock () {
    if grep -q 'PATTERN'; then
        # some command here
    fi
}

関数がタスクを実行した後もNodeアプリケーションを実行し続ける必要がある場合は、その出力を引き続き使用する必要があります。

delete_lock () {
    if grep -q 'PATTERN'; then
        # some command here
    fi
    cat >/dev/null
}

それ以外の場合、ノードアプリケーションはSIGPIPE信号を受信して​​終了します。

関連情報