Em:
tail -n0 -f -- "$my_input" |
ql_receiver_lock_holder |
sed /xxx/q > "$my_output"
-
sed
sairia depois de ler a primeira linha contendoxxx
. -
ql_receiver_lock_holder
, em seguida, sairia (morto por um SIGPIPE) após a primeira gravação que faz para stdout (o tubo agora quebrado) depois disso. - Da mesma forma,
tail
sairia na primeira gravação depois disso.
Se você quiser que ql_receiver_lock_holder
e tail
saiam assim que sed
sair sem esperar pela próxima gravação, você pode usar as abordagens descritas em
Observe que esse tipo de while read
loop não é o caminho certo para processar texto em shells . No mínimo, você precisaria de algo como:
while IFS= read -r line; do
printf '%s\n' "$line"
case $line in
(*xxx*) break
esac
done
para substituir o sed /xxx/q
, mas que seria terrivelmente ineficiente, exceto para entradas muito pequenas.