Lê do pipe e pipe nomeados para o processo secundário

0

Eu tenho isso:

delete_lock(){
  first_arg=$1
}

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

Eu estou olhando para ler de my_named_pipe no stdin do processo node.js, e sobre determinada entrada, então escreva para stdout no processo node.js que seria então capturado por delete_lock.

Minha principal questão é, como posso referenciar stdin em delete_lock no bash? Eu não acho que é $ 0, como posso fazer isso?

Esta é a única maneira de fazer isso?

node x.js | { while read line; delete_lock $line; } < ${my_named_pipe} &
    
por Alexander Mills 20.04.2018 / 10:04

1 resposta

2

Você diz que precisa do aplicativo Node para ler o pipe, então vamos fazer isso:

node x.js <"$my_named_pipe"

Então você diz que quer que a função leia a saída disso, então vamos fazer isso também:

node x.js <"$my_named_pipe" | delete_lock

Note que | é um terminador de comando, o que significa que em

command1 | command2 <thing

é command2 que lê thing .

Respondendo a comentários:

A função delete_lock pode ler sua entrada padrão, que vem do aplicativo Node. Se, por exemplo, ele tiver que fazer alguma ação dependendo de um padrão na saída do aplicativo Node, talvez queira usar grep :

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

Se você precisar que o aplicativo Node continue após a ação ter sido executada pela função, será necessário continuar consumindo sua saída:

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

Caso contrário, o aplicativo Node receberá um sinal SIGPIPE e terminará.

    
por 20.04.2018 / 10:26