Você pode usar o utilitário xargs
para isso. Ele pode executar um comando para cada linha no stdin, portanto, precisamos garantir que xargs
receba como entrada uma única linha no stdin no momento em que deve iniciar o comando, o que pode ser realizado com grep
:
proc1 | grep --max-count=1 "${targetString}" | xargs --max-lines=1 --no-run-if-empty --replace -- proc2
Os argumentos --max-count=1
, --max-lines=1
e --no-run-if-empty
garantem que proc2
seja iniciado exatamente uma vez se e quando proc1
produzir ${targetString}
pela primeira vez e nunca se proc1
nunca produzir ${targetString}
.
O --replace
evita que xargs
acrescente a linha de entrada à sua linha de comando.
Eu usei a seguinte linha de comando para testá-lo:
(echo Start >&2; sleep 3 ; echo Trigger; sleep 3; echo End >&2) | grep --max-count=1 Trigger | xargs --max-lines=1 --no-run-if-empty --replace -- echo "Triggered"