Это название напряжено ... сложно описать мои интересы, тем более, чтобы сделать это в ясной форме.Получение результата из командной потоковой информации
Благодаря ответу от акостадинов, я был освобожден от моего незнания о stdin. Вот решение. Оригинальный вопрос следует за решением ...
Я всегда связываю трубу с выходом, как если бы это было одностороннее соединение. Я использовал трубы для прямого вывода.
Но, конечно, вы направляете его куда-то, и это место, где ваш трубопровод использует его как вход. Это первый раз в программе, которую я использовал или даже думал использовать, stdin.
stdin исправил проблему отлично.
Я писал наивную программу, чтобы превратить мою миди-клавиатуру в устройство ввода клавиатуры типа. Программа служит своей цели, особенно теперь, когда у меня есть расход ресурсов, работающий на ноль, но функция этого оказалось лучшей идеей, чем я ожидал. Теперь я программирую с помощью своей электронной клавиатуры, и если я ударяю обломок или просто сжигаю на повторяющемся коде, я включаю пианино и просто играю, пока не смогу снова работать.
nutes ...
#!/bin/bash
while [ 17 ]; do
olea=""
aseqdump -p 20 | {
while read line ; do
a=($line)
if [ "$olea" != "$line" ];then
b=${a[5]}
if [ $b ]; then
lenny=${#b}
last=${b:$lenny-1:$lenny}
if [ "$last" == "," ]; then
b=${b:0:$lenny-1}
fi
fi
c=${a[4]}
case "$b" in
#7h3 0c74v35
"60") if [ "${a[2]}" == "on" ]; then `/home/pikey/./xsendkeycode 54 1`; else `/home/pikey/./xsendkeycode 54 0`;fi;; #echo -ne "c"; echo -ne "c">>textfile ;;
"62") if [ "${a[2]}" == "on" ]; then `/home/pikey/./xsendkeycode 40 1`; else `/home/pikey/./xsendkeycode 40 0`;fi;; #echo -ne "d"; echo -ne "d">>textfile ;;
"64") if [ "$c" == "controller" ]; then
valdue=${a[7]}
if [ "$valdue" == "127" ]; then
`/home/pikey/./xsendkeycode 62 1` #shft
else
`/home/pikey/./xsendkeycode 62 0` #shft
fi
else
if [ "${a[2]}" == "on" ]; then
`/home/pikey/./xsendkeycode 26 1`
else
`/home/pikey/./xsendkeycode 26 0`
fi
#echo -ne "e"
#echo -ne "e">>textfile
fi;;
"65") if [ "${a[2]}" == "on" ]; then `/home/pikey/./xsendkeycode 41 1`; else `/home/pikey/./xsendkeycode 41 0`;fi;; #echo -ne "f"; echo -ne "f">>textfile ;;
"67") if [ "${a[2]}" == "on" ]; then `/home/pikey/./xsendkeycode 42 1`; else `/home/pikey/./xsendkeycode 42 0`;fi;; #echo -ne "g"; echo -ne "g">>textfile ;;
"69") if [ "${a[2]}" == "on" ]; then `/home/pikey/./xsendkeycode 38 1`; else `/home/pikey/./xsendkeycode 38 0`;fi;; #echo -ne "a"; echo -ne "a">>textfile ;;
"71") if [ "${a[2]}" == "on" ]; then `/home/pikey/./xsendkeycode 56 1`; else `/home/pikey/./xsendkeycode 56 0`;fi;; #echo -ne "b"; echo -ne "b">>textfile ;;
esac
fi
olea="$line"
done
}
done
Это делает для чистых положительных отвлекающих.
В основном я запускаю команду под названием aseqdump. На странице руководства:
NAME
aseqdump - show the events received at an ALSA sequencer port
SYNOPSIS
aseqdump [-p client:port,...]
При запуске программа прослушивает клиент и выводит статус клиентов.
В моем использовании я слушаю устройство midi.
Выход постоянно освежает.
Я пытаюсь написать сценарий bash, который читается в последней строке и обрабатывает информацию из этой последней строки.
Как я могу это сделать?
Я попытался установить выход как переменную, но с трудом делал эту работу так, как я предполагал.
Затем я отправил вывод в файл и прочитал из файла, который работал нормально, но файл быстро заполнился, поэтому я попытался вернуть только последние десять строк файла в себя, но это разбило трубку.
В конце я написал отдельный скрипт, который определяет количество строк в выходном файле, если он превышает верхний предел, который он убивает, коты последних десяти строк в себя, а затем перезапускает команду с помощью присоединяемого канала , Затем он ждет и делает это снова, когда это необходимо.
Этот последний метод - это просто пережевывание ресурсов. Около 8% при работе и 17% и 14% при холостом ходу.
Все, что я хочу, это прочитать последний результат выполнения команды.
Как я могу сделать то, что хочу, не всасывая столько CPU?
Вы можете использовать aseqdump | tail -f - это дает самый последний вывод из команды –