Я пытаюсь отслеживать деактивацию уведомлений в андроиде. Это я планировал сделать, опросив уведомления dumpsys каждые х секунд. Там, где я помещал уведомление в переменную, поэтому я могу искать переменную $ tmp для текста (в данном случае google.gm), и на основании этого он установит $ Gmail на true или false.
Когда я тестировал свою настройку скрипта через терминал Cygwin на ПК, он отлично работал, однако не на Android
получение уведомления dumpsys в $ tmp отлично работает, но когда я тестирую его (в оболочке) на android, похоже, не хочет принимать мои * подстановочные знаки.
tmp=$(dumpsys notification)
[[ "$tmp" == *"google.gm"* ]] && Gmail=true || Gmail=false
Последние два часа я занимаюсь поиском в Интернете, но это бы сбило меня с ума. Я сделал упрощенные тесты для его отладки, и это действительно похоже на подстановочный знак
Кто-нибудь видит, что я делаю неправильно?
После новых предложений мне удалось сделать это:
tmp=$(dumpsys notification)
case $tmp in *notify_missed_call*) PRF1="1" ;; *) PRF1="0" ;; esac
case $tmp in *conv_notify*) PRF2="1" ;; *) PRF2="0" ;; esac
case $tmp in *NotYetThere*) PRF3="1" ;; *) PRF3="0" ;; esac
case $tmp in *stat_notify_calendar*) PRF4="1" ;; *) PRF4="0" ;; esac
echo $PRF1,$PRF2,$PRF3,$PRF4, > /sdcard/tmp.txt
Но почему-то это срабатывает только при вводе в 1 строку; между ними. любой способ сделать эту работу многострочной (проще поддерживать) и оптимизировать ее?
благодаря
Похоже, у вас нет баха на этом Android, поэтому попробуйте использовать POSIX.
case $(dumpsys notification) in
*google.gm*) Gmail=true ;;
*) Gmail=false ;;
esac
Обновление. Учитывая ваш обновленный ответ, я вижу, что вы проверяете несколько значений в выводе dumpsys notification
. Предполагая, что в одной строке может встречаться только одна из этих строк, лучший способ сделать это - прочесть ее по строкам с помощью оболочки или awk
dumpsys notification | {
while read -r line; do
case $line in
*notify_missed_call*) prf1=1;;
*conv_notify*) prf2=1;;
*NotYetThere*) prf3=1;;
*stat_notify_calendar*) prf4=1;;
esac
done
echo "${prf1:-0},${prf2:-0},${prf3:-0},${prf4:-0}"
} > /sdcard/tmp.txt
С awk вы можете обнаружить несколько значений в одной строке.
dumpsys notification | awk '
/notify_missed_call/{missed=1}
/conv_notify/{conv=1}
/NotYetThere/{notyet=1}
/stat_notify_calendar/{cal=1}
END { print missed+0,conv+0,notyet+0,cal+0 }' > /sdcard/tmp.txt
dumpsys
? переменная остается пустой? выдает сообщение об ошибке? Кстати, еще один способ проверить вывод, if dumpsys notification | grep -Fq 'google.gm'; then Gmail=true; else Gmail=false; fi