Как мне работать с непрерывным выводом по конвейеру из команды bash?Linux

Ответить
Anonymous
 Как мне работать с непрерывным выводом по конвейеру из команды bash?

Сообщение Anonymous »

Я пытаюсь написать небольшой скрипт bash, который будет принимать значения из горизонтального колеса прокрутки моей мыши для изменения громкости моей системы.
Используя это руководство, я придумал следующую команду для успешного чтения значений:

Код: Выделить всё

evemu-record /dev/input/event16 | grep --line-buffered "0002 0006" | awk '{ print $10 }'
Это отображает значения на терминале по мере их поступления, но я хочу иметь возможность использовать условную логику для каждого значения, чтобы определить, увеличивать или уменьшать громкость (и насколько).
Моя предыдущая попытка сделать это использовала цикл while (и предложения из некоторых других сообщений, которые, казалось, были связаны с моей проблемой), который мог перехватить выходные данные, но использование grep слишком сильно замедляло все, чтобы его можно было использовать:

Код: Выделить всё

stdbuf -oL evemu-record /dev/input/event16 |
while IFS= read -r line; do
g=$(echo "$line" | grep "0002 0006") # falls behind substantially on mouse movement
# g="$line" # does not fall behind
if [ -n "$g" ]; then
echo "$g"
fi
done
Это делает то, что я хочу, но при перемещении мыши данные поступают гораздо чаще, и кажется, что эта реализация слишком неэффективна, чтобы успевать за ней. Замена закомментированной строки назначения g позволяет синхронизировать выходные данные с последними выходными данными evemu-record.
Я попробовал передать первую команду выше в цикл while, но, похоже, это не работает.

Подробнее здесь: https://stackoverflow.com/questions/798 ... sh-command
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»