Невозможно перенаправить стандартный вывод монитора alsactl

Когда я запускаю alsactl monitor, я вижу вывод как таковой при настройке громкости:

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

Однако, когда я пытаюсь перенаправить это в файл или процесс с помощью >, >> или |, я не вижу вывода, и вывод не перенаправляется.

Чем вызвано такое поведение, и как я могу это исправить?


К вашему сведению, это для взлома , чтобы заставить сломанный левый динамик остаться на 0 :

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

Если кто-то знает лучший способ сделать это (например, как заблокировать элемент управления, чтобы его нельзя было изменить), это было бы здорово!

5
задан 13 April 2017 в 15:24

1 ответ

Проблема в том, что, поскольку alsactl не завершается до тех пор, пока вы принудительно не завершите его, буферизованный вывод не может быть записан в файл, потому что это делается после того, как команда завершила свое выполнение.

Вы можете принудительно сделать stdout of alsactl буферизацией строки и, следовательно, перенаправить ее сразу после каждой строки вывода, используя stdbuf:

stdbuf -oL alsactl monitor > outputfile
0
ответ дан 13 April 2017 в 15:24

Другие вопросы по тегам:

Похожие вопросы: