명명된 파이프 및 파이프에서 작업자 프로세스로 읽기

명명된 파이프 및 파이프에서 작업자 프로세스로 읽기

나는 이것을 가지고있다:

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 신호를 수신하고 종료됩니다.

관련 정보