Estou tentando escrever um script bash (sou muito novo nisso, por sinal) em um sistema Linux e basicamente quero que ele execute um comando a cada 5 segundos, enquanto outro comando não estiver gerando um valor.
Então o que eu tenho até agora é xev | grep -A2 --line-buffered -E 'ButtonRelease' | grep -o 'button 1'
que essencialmente gera "botão 1" quando clico na janela xev. Quero executar um comando separado a cada 5 segundos ( xdotool mousemove 1401 1139 click 1
) até clicar na janela xev, ponto em que o script para.
Se o seu comando retornar imediatamente, basta pegar o comando e escrever a saída em uma variável.
Em seguida, teste se a saída está vazia com
Você pode colocar isso em um loop while:
Se o seu comando for um processo de bloqueio e você quiser executar algo com base na saída dele, será necessário bifurcar e monitorar essa saída.
Aqui está uma solução que coloca o
xdotool
comando de repetição em segundo plano e, em seguida, monitoraxev
o gatilho relevante. Uma vez encontrado, ele mata o processo em segundo plano e sai de forma limpa.Os
stdbuf -oL
tolosxev
produzem suas mensagens informativas linha por linha, em vez de armazená-las em buffer, como seria mais normal para um pipe.