Impossible de redirect la sortie standard de `alsactl monitor`

Lorsque je lance alsactl monitor , je vois la sortie en tant que telle lorsque je règle le volume:

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

Cependant, lorsque j’essaie de redirect cela vers un fichier ou un processus avec > , >> ou | Je ne vois aucune sortie, et la sortie n’est pas redirigée.

Quelles sont les causes de ce comportement et comment puis-je y remédier?


Pour votre information, c’est pour un hack de forcer un haut-parleur gauche cassé à restr à 0 :

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

Si quelqu’un connaît un meilleur moyen de le faire (par exemple, verrouiller un contrôle pour qu’il ne puisse pas être modifié), ce serait génial!

Le problème est que, puisque alsactl ne se termine pas tant que vous ne l’avez pas arrêté de force, la sortie en mémoire tampon ne peut pas être écrite dans le fichier, car cette opération est effectuée une fois que la commande a terminé son exécution.

Vous pouvez forcer le stdout d’ alsactl à être mis en tampon de ligne et donc à être redirigé immédiatement après chaque ligne de sortie à l’aide de stdbuf :

 stdbuf -oL alsactl monitor > outputfile