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 № 1Por 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.