/ Saída / piping de um programa em execução em xargs - c, bash, shell

Saída de tubulação de um programa em execução em xargs - c, bash, shell

Eu tenho um programa C que lê os dados do acelerômetro continuamente via i2c. Sempre que a orientação do tablet mudou, ele gera uma nova linha para stdout.

Agora, quero poder usar essa saída em um script bash para alterar a rotação da tela.

Agora, o problema é este: Quando vejo a saída do programa no bash, o programa está exibindo as alterações linha por linha. Quando eu redireciono a saída para um arquivo, a saída é gravada continuamente no arquivo, mas quando tento canalizar a saída, nada está acontecendo.

Aqui está o programa C:

#include <stdio.h>

int main(int argc, char *argv[])
{
int changed;
char *orientation;

while (1) {
/* Read data from i2c, check for change in orientation */
if (changed) {
fprintf(stdout, "%sn", orientation);
fflush(stdout);
changed = 0;
}
}

exit(0);
}

E aqui está o meu julgamento no bash:

#!/bin/bash

# This does not work, xrandr is not called.
./i2c-rotation | xargs xrandr --orientation
# This is working
#./i2c-rotation > output

Respostas:

1 para resposta № 1

Por padrão, xargs quer ler muitos argumentos antes de executar um comando com todos eles. Provavelmente não é o que você quer neste caso.

xargs -L1 executa o comando após cada linha completa de entrada.