Когда я запускаю 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
Если кто-то знает лучший способ сделать это (например, как заблокировать элемент управления, чтобы его нельзя было изменить), это было бы здорово!
Проблема в том, что, поскольку alsactl
не завершается до тех пор, пока вы принудительно не завершите его, буферизованный вывод не может быть записан в файл, потому что это делается после того, как команда завершила свое выполнение.
Вы можете принудительно сделать stdout
of alsactl
буферизацией строки и, следовательно, перенаправить ее сразу после каждой строки вывода, используя stdbuf
:
stdbuf -oL alsactl monitor > outputfile