web-dev-qa-db-fra.com

Impossible de rediriger la sortie standard de `alsactl monitor`

Quand je lance alsactl monitor, je vois la sortie comme telle quand 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 rediriger 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 bidouiller pour forcer un haut-parleur gauche cassé à rester à :

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, comment verrouiller un contrôle afin qu'il ne puisse pas être modifié), ce serait génial!

5
Zaz

Le problème est que, comme 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 exécutée une fois l'exécution de la commande terminée.

Vous pouvez forcer la stdout de alsactl à être mise en mémoire de lignes et donc à être redirigée immédiatement après chaque ligne de sortie à l'aide de stdbuf:

stdbuf -oL alsactl monitor > outputfile
7
kos