Não é possível redirecionar o stdout de 'alsactl monitor'

4

Quando executo alsactl monitor , vejo a saída como tal quando ajustei o volume:

card 0, #24 (2,0,0,PCM Playback Volume,0) VALUE
card 0, #24 (2,0,0,PCM Playback Volume,0) VALUE

No entanto, quando tento redirecionar isso para um arquivo ou processo com > , >> ou | , não vejo saída e a saída não é redirecionada.

O que causa esse comportamento e como posso corrigi-lo?

FYI, isso é para um hackear para forçar um alto-falante quebrado a permanecer em 0 :

alsactl monitor | \
while read; do
    amixer -D pulse sset Master 0,-
done

Se alguém souber uma maneira melhor de fazer isso (por exemplo, como bloquear um controle para que ele não possa ser alterado), isso seria ótimo!

    
por Zaz 31.05.2015 / 15:54

1 resposta

5

O problema é que, como alsactl não termina até você forçá-lo a terminá-lo, a saída armazenada em buffer não pode ser gravada no arquivo, porque isso é feito após o comando ter terminado sua execução.

Você pode forçar o stdout de alsactl a ser armazenado em buffer de linha e, portanto, ser redirecionado imediatamente após cada linha de saída usando stdbuf :

stdbuf -oL alsactl monitor > outputfile
    
por kos 31.05.2015 / 16:31