BASH в Android> использование групповых символов не работает

1

Я пытаюсь отслеживать деактивацию уведомлений в андроиде. Это я планировал сделать, опросив уведомления 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 строку; между ними. любой способ сделать эту работу многострочной (проще поддерживать) и оптимизировать ее?

благодаря

  • 0
    Пожалуйста, покажите код.
  • 0
    в твоем примере нет подстановочных знаков?
Показать ещё 6 комментариев
Теги:
pattern-matching
notifications
wildcard

1 ответ

0
Лучший ответ

Похоже, у вас нет баха на этом 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
  • 0
    Это ничего не делает в оболочке. У меня установлен BusyBox v1.18.4 и работают другие скрипты, только не этот :)
  • 0
    @Nixx, ничего не делает? Он не устанавливает для переменной Gmail значение true или false, основываясь на выводе dumpsys ? переменная остается пустой? выдает сообщение об ошибке? Кстати, еще один способ проверить вывод, if dumpsys notification | grep -Fq 'google.gm'; then Gmail=true; else Gmail=false; fi
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню