Aguardando saída: comportamento inesperado ao canalizar o teste xinput para grep

1

Depois

% xkbset -repeatkeys
% xinput test 14 | grep -m 1 "key release 36"

e segurando o segundo retorno, nada acontece, como esperado. Depois de liberando o segundo retorno, recebo

key release 36

Agora eu esperaria que o programa saísse imediatamente, mas em vez disso aguarda um pressionamento de tecla adicional - mesmo os trabalhos de turno -, antes saindo. Eu suponho que isso faz xinput produzir uma linha adicional, mas Eu não vejo porque isso deveria ser necessário --- grep já encontrou o linha estava procurando. Então, por que não sai imediatamente?

PS. A resposta parece correta, e consegui obter o desejado resultar fazendo

% xinput test 14 | { grep -m 1 "key release 36" && killall xinput ; }
    
por Toothrot 21.07.2018 / 11:54

1 resposta

2

grep provavelmente sai após a primeira partida. É xinput que ainda está em execução: ele apenas percebe que o pipe está fechado na próxima vez que tentar gerar algo.

Por exemplo, aqui apenas o primeiro pgrep encontra um processo em execução de grep , mas o sono do lado esquerdo ainda acontece.

$ ( pgrep grep >&2; echo xxx; pgrep grep >&2; sleep 3; echo yyy ) |grep -m1 xxx
29149
xxx
    
por 21.07.2018 / 13:30

Tags