私はこれを持っています:
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信号を受信して終了します。